В последнее время я обнаружил, что пишу много классов, подобных:доступа «это» внутри статических CodeBlocks
public class MyTypeCodes
{
public static MyTypeCode E = new MyTypeCode{ Desc= "EEE", Value = "E" };
public static MyTypeCode I = new MyTypeCode { Desc= "III", Value = "I" };
private static readonly Lazy<IEnumerable<MyTypeCode>> AllMyTypeCodes =
new Lazy<IEnumerable<MyTypeCode>>(() =>
{
var typeCodes = typeof(MyTypeCodes)
.GetFields(BindingFlags.Static | BindingFlags.Public)
.Where(x => x.FieldType == typeof (MyTypeCode))
.Select(x => (MyTypeCode) x.GetValue(null))
.ToList();
return typeCodes;
});
public static IEnumerable<MyTypeCode> All
{
get { return AllMyTypeCodes.Value; }
}
}
Если вы заметили внутри new Lazy<IEnumerable<MyTypeCode>>(() =>
, что я специально нужно сделать typeof(MyTypeCodes)
, даже если я внутри класса MyTypeCodes. Есть ли способ, которым я могу написать это без необходимости звонить typeof()
для класса, в котором я непосредственно внутри? Если бы это был обычный метод, я бы this.GetType()
, который, очевидно, не работает (по какой-то причине) со статикой.
FYI - Вы должны использовать 'ToList()' на 'IEnumerable' последовательности здесь ... В противном случае, каждый вызов будет снова проходить через отражение. –