关于这段代码意味着什么的C#问题

时间:2010-09-30 21:04:46

标签: c# visual-studio-2008

我正在从我运行SQL查询的其中一个应用程序中学习c#代码。

我想知道以下代码在外行人的术语中做了什么:

  return typeof(ViewModelBase<T>).GetProperty(propertyName) != null;

这是一个返回布尔值的函数,并将一个字符串传递给它。

ViewModelBase<T>是一个抽象类。有人也可以解释一下<T>的作用吗?我对这些有想法,但我不确定究竟是什么。

谢谢!

4 个答案:

答案 0 :(得分:4)

如果类型具有属性,则代码返回true,如果不具有属性,则返回false

此代码将写入泛型类,类型参数为T.在泛型中,每次将“hard”类型与泛型类一起使用时,编译器将创建一个全新的具体类型。例如,如果项目中的代码使用ViewModelBase<int>ViewModelBase<string>ViewModelBase<MyType>,则编译器在最终程序集中将创建三种具体类型。

这三种假设类型中的每一种都具有属性和方法。上面显示的代码将(为了所有意图和目的)重复三次,在三种情况的每一种情况下,类型参数“T”被intstringMyType替换。

然后

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的属性。