SqlProfileProvider:SettingsProperty中typeof(string)和Type.GetType(" System.String")之间的区别是什么?

时间:2014-11-07 09:29:19

标签: c# types profile

我正在编写自定义配置文件提供程序,并且必须处理来自WCF的数据。现在基本上我的Profile Provider通过WCF与另一个Profile Provider建立了桥梁,我正在实现GetPropertyValues。由于SettingsPropertyCollection无法序列化,因此我创建了一个简单的自定义类来传达我想要的配置文件属性:

[DataContract]
public class ProfileKey
{
    public ProfileKey()
    {
    }

    public ProfileKey(string name, string type)
    {
        Name = name;
        Type = type;
    }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Type { get; set; }
}

因此,要获取配置文件值,我将发送ProfileKeys列表,而SettingsProperty具有2个重要属性,以从WCF服务后面使用的标准SqlProfileProvider获取配置文件属性:名称和类型。必须在WCF端自己构建SettingsPropertyCollection似乎没有这样的问题:

SettingsPropertyCollection properties = new SettingsPropertyCollection();
foreach (ProfileKey key in collection)
{
    properties.Add(new SettingsProperty(key.Name) { PropertyType = Type.GetType(key.Type) });
}

令我惊讶的是,上面的代码无效!经过大量的实验,我发现只有在我使用typeof(string)时它才有效。大惊小怪,我在即时窗口中运行了以下内容:typeof(string) == Type.GetType("System.String"),结果确实是true

所以我的问题是typeof(string)Type.GetType("System.String")之间的区别是什么?如果它们确实相等,为什么SqlProfileProvider在使用时没有返回我的值后来吗

另一个问题可能类似:Type Checking: typeof, GetType, or is?

但是,目前的问题不是关于typeof vs GetType的性能,the other question的答案也没有回答为什么typeof(string) == GetType("System.String")导致TRUE而SqlProfileProvider只适用于typeof(字符串)类型。

0 个答案:

没有答案