【问题标题】:List<struct> of List<class> appropriate? Finding a simpler type?List<struct> 的 List<class> 合适吗?寻找更简单的类型?
【发布时间】:2015-09-16 13:35:07
【问题描述】:

我需要一个集合,其中该集合中的每个项目都由 2 个字符串组成:RemotePath 和 LocalPath。所以 RemotePath 可能是 '/var/file/File1.txt' 而 LocalPath 是 'c:\file\File1.txt'。

最初,我们像这样创建了一个结构,并像这样添加了项目。我也可以使用一个类,但是

public struct FilesToProcess
{
    public string RemoteFilePath;
    public string LocalFilePath;
}

List<FilesToProcess> list = new List<FilesToProcess>();
FilesToProcess myFiles = new FilesToProcess();

myFiles.RemoteFilePath = "/var/file/File1.txt";
myFiles.LocalFilePath = @"c:\file\File1.txt";
list.Add(myFiles);

myFiles.RemoteFilePath = "/var/file/File23.txt";
myFiles.LocalFilePath = @"c:\file\File23.txt";
list.Add(myFiles);

// and so on

我也可以使用class,但我正在寻找更简单的类型。至少对我来说,存储两个简单字符串的class 对于这种用途来说似乎有点过分了;我使用 struct 是因为它更直接一些,但我倾向于避免使用它们(因此有问题)。

我的问题:有没有更简单的方法可以在不使用classesstructs 的情况下完成此操作?

谢谢。

【问题讨论】:

标签: c# .net visual-studio-2010 class struct


【解决方案1】:

使用class。一般来说,结构的建议是:

除非类型具有以下所有条件,否则不要定义结构 特点:

  • 它在逻辑上表示单个值,类似于原始类型(整数、双精度等)。
  • 它的实例大小小于 16 字节。
  • 它是不可变的。
  • 不必经常装箱。

Choosing Between Class and StructWhen should I use a struct instead of a class?

【讨论】:

  • 由于该结构只是两个引用,我认为大小建议不是在这里使用结构的最突出的一点。
  • 它也可以很容易地变成不可变的,我们没有证据表明它被装箱了。最强的一点是关于表示单个值。
  • 嗯,KeyValuePair&lt;Guid, decimal&gt; 怎么样。或List&lt;T&gt;.Enumerator
【解决方案2】:

如果您不想声明单独的类或结构,您可以使用类Tuple&lt;string, string&gt;。那么你有

var list = new List<Tuple<string, string>>(); 
list.Add(new Tuple<string, string>(@"c:\file\File1.txt", @"/var/file/File1.txt"));
var firstLocalFilePath = list[0].Item1; 
var firstRemoteFilePath = list[0].Item2;

【讨论】:

  • 这确实有效,尽管您失去了为元组的两个项目分配有意义的名称的好处。值得了解,但可能更适合真正不在乎这两项含义的代码。
  • @DanBryant 你是对的。我试图在我的例子中说清楚。我建议它,因为作者想要一个简单的类型。这种类型很简单,并且已经存在。有时不需要声明额外的结构。 Tuple 是一个快速而肮脏的解决方案。
猜你喜欢
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 2020-02-29
  • 2017-07-09
相关资源
最近更新 更多