কমপক্ষে আমি যে ধরণের পরীক্ষার সাথে এটি পরীক্ষা করেছি সেগুলি নিয়ে এটি কাজ করে বলে মনে হচ্ছে।
আপনি পাস প্রয়োজন PropertyInfo
সম্পত্তি আপনি আগ্রহী জন্য, এবং এছাড়াও Type
যা সম্পত্তি সংজ্ঞায়িত করা হয় ( না একটি উদ্ভূত বা অভিভাবক টাইপ - এটা সঠিক টাইপ হতে হয়েছে):
public static bool IsNullable(Type enclosingType, PropertyInfo property)
{
if (!enclosingType.GetProperties(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly).Contains(property))
throw new ArgumentException("enclosingType must be the type which defines property");
var nullable = property.CustomAttributes
.FirstOrDefault(x => x.AttributeType.FullName == "System.Runtime.CompilerServices.NullableAttribute");
if (nullable != null && nullable.ConstructorArguments.Count == 1)
{
var attributeArgument = nullable.ConstructorArguments[0];
if (attributeArgument.ArgumentType == typeof(byte[]))
{
var args = (ReadOnlyCollection<CustomAttributeTypedArgument>)attributeArgument.Value;
if (args.Count > 0 && args[0].ArgumentType == typeof(byte))
{
return (byte)args[0].Value == 2;
}
}
else if (attributeArgument.ArgumentType == typeof(byte))
{
return (byte)attributeArgument.Value == 2;
}
}
var context = enclosingType.CustomAttributes
.FirstOrDefault(x => x.AttributeType.FullName == "System.Runtime.CompilerServices.NullableContextAttribute");
if (context != null &&
context.ConstructorArguments.Count == 1 &&
context.ConstructorArguments[0].ArgumentType == typeof(byte))
{
return (byte)context.ConstructorArguments[0].Value == 2;
}
// Couldn't find a suitable attribute
return false;
}
বিশদ জন্য এই নথিটি দেখুন ।
সাধারণ বক্তব্যটি হ'ল হয় নিজেই সম্পত্তিটির [Nullable]
উপর তার কোনও বৈশিষ্ট্য থাকতে পারে, অথবা এটি যদি সংযুক্তকরণের ধরণের [NullableContext]
বৈশিষ্ট্য নাও রাখতে পারে । আমরা প্রথমে সন্ধান করি [Nullable]
, তারপরে যদি এটি না পাওয়া যায় তবে আমরা [NullableContext]
ঘেরের ধরণটি অনুসন্ধান করি ।
সংকলকটি অ্যাসেমব্লিতে বৈশিষ্ট্যগুলি এম্বেড করতে পারে এবং যেহেতু আমরা অন্য কোনও সমাবেশ থেকে কোনও ধরণের দিকে চেয়ে থাকি, তাই আমাদের কেবল প্রতিবিম্ব-লোড করা দরকার।
[Nullable]
সম্পত্তি জেনারিক হলে একটি অ্যারে দিয়ে ইনস্ট্যান্টিয়েট করা হতে পারে। এই ক্ষেত্রে, প্রথম উপাদানটি প্রকৃত সম্পত্তিকে উপস্থাপন করে (এবং আরও উপাদানগুলি জেনেরিক যুক্তি উপস্থাপন করে)। [NullableContext]
সর্বদা একক বাইট দ্বারা তাত্ক্ষণিক হয়।
2
"Nullaable" এর অর্থ একটি মান । 1
এর অর্থ "অযোগ্য নয়", এবং এর 0
অর্থ "বিস্মৃত"।
[NullableContext(2), Nullable((byte) 0)]
করতে টাইপ (Foo
) - সুতরাং যে কি জন্য চেক করতে, কিন্তু আমি ব্যাখ্যা করতে কিভাবে যে নিয়ম বুঝতে আরো খনন প্রয়োজন চাই এর!