如何将 ConfigurationSection 属性 作为 System.Type
How do I get ConfigurationSection property as a System.Type
我想定义一个自定义配置部分并让 属性 不产生字符串而是产生 system.type(如果用户输入大量垃圾则为 null)
例如:
<myCustomConfig myAnnoyingType="System.String" />
在 C# 中(在当前现实世界中)
[ConfigurationProperty("myAnnoyingType")]
public string MyAnnoyingType
{
get { return (string)this["myAnnoyingType"]; }
}
// else where in the app
var stringType = thatConfig.MyAnnoyingType
var actualType = Type.GetType(stringType);
// wow that was boring.
在 C# 中(在理想世界中)
[ConfigurationProperty("myAnnoyingType")]
public Type MyAnnoyingType
{
get { return (Type)this["myAnnoyingType"]; }
}
我想要的是不必将项目作为字符串保存在 C# 中,然后将其转换为应用程序中的类型;作为 ConfigurationManager 职责的一部分,我希望它自动完成。
这可能吗?如果必须的话,我可以使用 TypeConverter,将它保留为字符串然后在应用程序中进行类型查找似乎太弱了。这并不难做,只是当我知道我正在寻找一种类型时似乎毫无意义,必须明确地做它的价值是什么。
首先,最好使用 fully qualified name 在您的设置中定义一个类型。这样,从 string
.
解析 Type
的问题就会减少
其次,您需要通过 Type
的字符串名称找到 Type
,正如在 Convert String to Type in C# 中已经回答的那样,因为仅仅将 string
转换为 Type
是不可能的。
你的情况是:
[ConfigurationProperty("myAnnoyingType")]
public Type MyAnnoyingType
{
get { return Type.GetType(this["myAnnoyingType"]); }
}
尝试使用将为您进行转换的 TypeConverterAttribute。这对我有用。
[ConfigurationProperty("type")]
[TypeConverter(typeof(TypeNameConverter))]
public Type Type
{
get
{
return (System.Type)this["type"];
}
set
{
this["type"] = value;
}
}
我想定义一个自定义配置部分并让 属性 不产生字符串而是产生 system.type(如果用户输入大量垃圾则为 null)
例如:
<myCustomConfig myAnnoyingType="System.String" />
在 C# 中(在当前现实世界中)
[ConfigurationProperty("myAnnoyingType")]
public string MyAnnoyingType
{
get { return (string)this["myAnnoyingType"]; }
}
// else where in the app
var stringType = thatConfig.MyAnnoyingType
var actualType = Type.GetType(stringType);
// wow that was boring.
在 C# 中(在理想世界中)
[ConfigurationProperty("myAnnoyingType")]
public Type MyAnnoyingType
{
get { return (Type)this["myAnnoyingType"]; }
}
我想要的是不必将项目作为字符串保存在 C# 中,然后将其转换为应用程序中的类型;作为 ConfigurationManager 职责的一部分,我希望它自动完成。
这可能吗?如果必须的话,我可以使用 TypeConverter,将它保留为字符串然后在应用程序中进行类型查找似乎太弱了。这并不难做,只是当我知道我正在寻找一种类型时似乎毫无意义,必须明确地做它的价值是什么。
首先,最好使用 fully qualified name 在您的设置中定义一个类型。这样,从 string
.
Type
的问题就会减少
其次,您需要通过 Type
的字符串名称找到 Type
,正如在 Convert String to Type in C# 中已经回答的那样,因为仅仅将 string
转换为 Type
是不可能的。
你的情况是:
[ConfigurationProperty("myAnnoyingType")]
public Type MyAnnoyingType
{
get { return Type.GetType(this["myAnnoyingType"]); }
}
尝试使用将为您进行转换的 TypeConverterAttribute。这对我有用。
[ConfigurationProperty("type")]
[TypeConverter(typeof(TypeNameConverter))]
public Type Type
{
get
{
return (System.Type)this["type"];
}
set
{
this["type"] = value;
}
}