我正在从我运行SQL查询的其中一个应用程序中学习c#代码。
我想知道以下代码在外行人的术语中做了什么:
return typeof(ViewModelBase<T>).GetProperty(propertyName) != null;
这是一个返回布尔值的函数,并将一个字符串传递给它。
ViewModelBase<T>
是一个抽象类。有人也可以解释一下<T>
的作用吗?我对这些有想法,但我不确定究竟是什么。
谢谢!
答案 0 :(得分:4)
如果类型具有属性,则代码返回true
,如果不具有属性,则返回false
。
此代码将写入泛型类,类型参数为T.在泛型中,每次将“hard”类型与泛型类一起使用时,编译器将创建一个全新的具体类型。例如,如果项目中的代码使用ViewModelBase<int>
,ViewModelBase<string>
和ViewModelBase<MyType>
,则编译器在最终程序集中将创建三种具体类型。
这三种假设类型中的每一种都具有属性和方法。上面显示的代码将(为了所有意图和目的)重复三次,在三种情况的每一种情况下,类型参数“T”被int
,string
和MyType
替换。
GetProperty()
检查具体类型是否具有“propertyName”变量中给出的属性,并相应地返回true或false。
答案 1 :(得分:3)
它会告诉您基于给定类型ViewModelBase<T>
的类类型T
是否具有与propertyName
的值相同的公共属性。
Type.GetProperty()
会返回PropertyInfo
个对象;否则为null。因此,对null的布尔比较。
答案 2 :(得分:1)
您拥有的代码片段是泛型类型的一部分,具有类型参数T
。现在,我们没有看到完整的方法,但我可以想象它看起来像这样:
public static bool T HasProperty<T>(string propertyName)
{
return typeof(ViewModelBase<T>).GetProperty(propertyName) != null;
}
假设你有一个班级Customer
:
class Customer
{
// implementation of class Customer goes here
}
然后你可以像这样调用HasProperty
方法:
bool itsThere = HasProperty<Customer>("SomePropertyName");
这意味着如果HasProperty
具有名为ViewModelBase<Customer>
的属性,则SomePropertyName
方法将返回true,否则为false。
答案 3 :(得分:0)
检查ViewModelBase<T>
是否具有名称等于propertyName
的属性。