1
是否有可能具有类型无关的属性类,可能用'where或'约束修饰?具有OR约束的泛型类型属性
例子:
public class Attribute<T> where T: string || bool {
public const char ATTRIBUTE_CHAR = 'a';
public string Key { get; set; }
public T Value { get; set; }
public Attribute(string key, T value) {
Key = key;
Value = value;
}
public Attribute(string key, bool value = true)
: base(key, value) {}
public Attribute(string key, string value)
: base(key, value) {}
public override string ToString() {
if(typeof(value) == bool && (bool)value)
return String.Format({0}={1},
ATTRIBUTE_CHAR, key);
else return String.Format({0}={1}:{2},
ATTRIBUTE_CHAR, key, (string)value);
}
}
这样的:
Attribute<bool> BoolAttr1 = new Attribute<bool>("bool_1");
Attribute<bool> BoolAttr2 = new Attribute<bool>("bool_2", false);
Attribute<string> StringAttr1 = new Attribute<string>("string_1", "val1");
Attribute<string> StringAttr2 = new Attribute<string>("string_2", "val2");
...everything.ToString();
将产生如下输出
a=bool_1
a=string_1:val1
a=string_2:val2
但这样的事情是永远不可能的:
Attribute<int>...
你能澄清属性类的目的吗? – daryal
@daryal在库中解析并提供类似下面的内容:'a = recvonly CRLF a = rtpmap:99 h263-1998/90000'这里有两种类型的属性,一种是布尔值(只有一个键'启用'属性,如果它是假的,它不会出现在消息中),一个是字符串(一个关键'rtpmap'和一个值'99 h263 ...) – Atrotygma
为什么你需要泛型?您在“属性”类中没有任何共同逻辑。泛型的whhole点是以同样的方式处理不同类型的对象。如果你需要像if(typeof(T)== bool)这样的行,那么它就是一个信号,你做错了。并回答你的问题 - 不,没有'或'。 –