gpt4 book ai didi

c# - 具有多种类型的列表

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:00 24 4
gpt4 key购买 nike

在 C# 中,有没有办法创建一个 list拥有多种类型?我的列表项可以是 int , string , DateTime , 或 char .我知道使用 List<object>ArrayList但由于封装,这些都不是好的做法。有实现这一目标的好方法吗?我认为创建一个界面可能会有帮助,但我想不出办法。

最佳答案

为此,我想出了第二种但截然不同的方法(可能在其他答案中有所描述,但现在已在此处实现),这次利用隐式操作,并且还具有使用框架列表类型的能力:

void Main()
{
var list = new List<Item>
{
1,
"foo",
DateTime.Now,
'x'
};
foreach (var item in list)
{
Console.WriteLine (item.ToString());
}
int i = list[0];
string s = list[1];
DateTime dt = list[2];
char c = list[3];
Console.WriteLine ("int: {0}, string: {1}, DateTime: {2}, char: {3}", i, s, dt, c);
}

enum Kind
{
Int,
String,
DateTime,
Char
}

class Item
{
int intValue;
string stringValue;
DateTime dateTimeValue;
char charValue;
Kind kind;

public object Value
{
get
{
switch (kind)
{
case Kind.Int:
return intValue;
case Kind.String:
return stringValue;
case Kind.DateTime:
return dateTimeValue;
case Kind.Char:
return charValue;
default:
return null;
}

}
}

public override string ToString()
{
return Value.ToString();
}

// Implicit construction
public static implicit operator Item(int i)
{
return new Item { intValue = i, kind = Kind.Int };
}
public static implicit operator Item(string s)
{
return new Item { stringValue = s, kind = Kind.String };
}
public static implicit operator Item(DateTime dt)
{
return new Item { dateTimeValue = dt, kind = Kind.DateTime };
}
public static implicit operator Item(char c)
{
return new Item { charValue = c, kind = Kind.Char };
}

// Implicit value reference
public static implicit operator int(Item item)
{
if(item.kind != Kind.Int) // Optionally, you could validate the usage
{
throw new InvalidCastException("Trying to use a " + item.kind + " as an int");
}
return item.intValue;
}
public static implicit operator string(Item item)
{
return item.stringValue;
}
public static implicit operator DateTime(Item item)
{
return item.dateTimeValue;
}
public static implicit operator char(Item item)
{
return item.charValue;
}
}

关于c# - 具有多种类型的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30494850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com