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)這樣的行,那麼它就是一個信號,你做錯了。並回答你的問題 - 不,沒有'或'。 –