Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以避免在这里创建类吗?_C#_.net - Fatal编程技术网

C# 我可以避免在这里创建类吗?

C# 我可以避免在这里创建类吗?,c#,.net,C#,.net,我使用的是.NET framework 2.0,我有一个类,如: class MyThing { private int val; private DateTime date; private Guid id; public MyThing(..) { ... } } 这个类存在的唯一原因是因为在代码中的某个时刻,我需要跟踪列表。然而,虚构并没有任何真正的目的,只是作为一个将我的数据保存在一个方法中的地方,所以为它创建一个类感觉很难看。我不想创建一个列表,因为这也很难看 还

我使用的是.NET framework 2.0,我有一个类,如:

class MyThing 
{
  private int val;
  private DateTime date;
  private Guid id;

  public MyThing(..) { ... }
}
这个类存在的唯一原因是因为在代码中的某个时刻,我需要跟踪列表。然而,虚构并没有任何真正的目的,只是作为一个将我的数据保存在一个方法中的地方,所以为它创建一个类感觉很难看。我不想创建一个列表,因为这也很难看


还有别的办法吗

为什么它很丑?这是完全正常的


但我同意,通过使用正确的类体系结构,您应该能够避免只将类作为方法之间的参数传递。

为什么这样做很难看?这是完全正常的


但我同意,通过使用正确的类体系结构,您应该能够避免仅将类作为方法之间的参数传递。

使用类或可能是a绝对是正确的方法。不知道你为什么觉得它难看。这就是目的。它定义了某种东西,在这种情况下,某种东西就是这三个值所表示的东西,您希望使用类或a保存一个列表,这肯定是正确的方法。不知道你为什么觉得它难看。这就是目的。它定义了一些东西,在这种情况下,一些东西就是你想要保留一个列表的三个值所代表的东西,正如其他人所建议的,类是正确的方法

此外,如果您不想仅仅为了将这些属性分组在一起而创建一个类,那么您可能需要看看Tuple类。它是在.NET4.0中引入的,但在.NET2.0中重新创建并不困难

基本上,它是一个具有一系列重载的泛型类,允许您以类型安全的方式将不同的对象分组在一起。大概是这样的:

public class Tuple<T1, T2, T3>
{
    public T1 Item1 { get; set; }
    public T2 Item2 { get; set; }
    public T3 Item3 { get; set; }
} 
Tuple<int, DateTime, Guid> myThing = new Tuple<int, DateTime, Guid>();
myThing.Item1 = 42;
myThing.Item2 = DateTime.Now;
myThing.Item3 = Guid.NewGuid();
然后,您可以这样使用它:

public class Tuple<T1, T2, T3>
{
    public T1 Item1 { get; set; }
    public T2 Item2 { get; set; }
    public T3 Item3 { get; set; }
} 
Tuple<int, DateTime, Guid> myThing = new Tuple<int, DateTime, Guid>();
myThing.Item1 = 42;
myThing.Item2 = DateTime.Now;
myThing.Item3 = Guid.NewGuid();

这可能无法满足您不丑陋的需求,但至少它是可重用的。

正如其他人所建议的,类是正确的选择

此外,如果您不想仅仅为了将这些属性分组在一起而创建一个类,那么您可能需要看看Tuple类。它是在.NET4.0中引入的,但在.NET2.0中重新创建并不困难

基本上,它是一个具有一系列重载的泛型类,允许您以类型安全的方式将不同的对象分组在一起。大概是这样的:

public class Tuple<T1, T2, T3>
{
    public T1 Item1 { get; set; }
    public T2 Item2 { get; set; }
    public T3 Item3 { get; set; }
} 
Tuple<int, DateTime, Guid> myThing = new Tuple<int, DateTime, Guid>();
myThing.Item1 = 42;
myThing.Item2 = DateTime.Now;
myThing.Item3 = Guid.NewGuid();
然后,您可以这样使用它:

public class Tuple<T1, T2, T3>
{
    public T1 Item1 { get; set; }
    public T2 Item2 { get; set; }
    public T3 Item3 { get; set; }
} 
Tuple<int, DateTime, Guid> myThing = new Tuple<int, DateTime, Guid>();
myThing.Item1 = 42;
myThing.Item2 = DateTime.Now;
myThing.Item3 = Guid.NewGuid();

这可能无法满足您不丑陋的要求,但至少它是可重用的。

如果您使用的是Visual Studio 2008或更高版本,无论您的目标是.NET 2.0,您都可以使用匿名类型并执行类似操作,而无需声明类:

static List<T> CreateList<T>(IEnumerable<T> stuff)
{
    return new List<T>(stuff);
}

static IEnumerable<T> SubSet<T>(IEnumerable<T> sequence, Predicate<T> predicate)
{
    foreach (var item in sequence)
        if (predicate(item)) yield return item;
}

static void Main(string[] args)
{
    var list = CreateList(new[]
                            {
                            new {val = 1,
                                date = DateTime.Now,
                                id = Guid.NewGuid()},
                            new {val = 2, 
                                date = DateTime.Now.AddDays(1),
                                id = Guid.NewGuid()}
                            });

    var subset = SubSet(list, item=>item.val == 1);
}

如果您使用的是Visual Studio 2008或更高版本,无论您的目标是.NET 2.0,您都可以使用匿名类型并执行类似操作,而无需声明类:

static List<T> CreateList<T>(IEnumerable<T> stuff)
{
    return new List<T>(stuff);
}

static IEnumerable<T> SubSet<T>(IEnumerable<T> sequence, Predicate<T> predicate)
{
    foreach (var item in sequence)
        if (predicate(item)) yield return item;
}

static void Main(string[] args)
{
    var list = CreateList(new[]
                            {
                            new {val = 1,
                                date = DateTime.Now,
                                id = Guid.NewGuid()},
                            new {val = 2, 
                                date = DateTime.Now.AddDays(1),
                                id = Guid.NewGuid()}
                            });

    var subset = SubSet(list, item=>item.val == 1);
}

如果您使用带有“Microsoft所有规则”的FxCop测试代码,那么使用类是唯一正确的方法

因为

List>将生成警告 Tuple也不是一个好的实践。您不知道元组中的Item1和Item2表示什么。此外,您将无法获得其类型的智能感知。 无论哪种方式,您都在创建引用类型,因此性能没有变化 MainClass和内部类具有“has-a”关系,如果使用list of list的元组,则无法理解该关系。 创建不同的类是提高可读性和保持代码整洁的最佳实践。
谢谢

如果您使用带有“Microsoft所有规则”的FxCop测试代码,那么使用类是唯一正确的方法

因为

List>将生成警告 Tuple也不是一个好的实践。您不知道元组中的Item1和Item2表示什么。此外,您将无法获得其类型的智能感知。 无论哪种方式,您都在创建引用类型,因此性能没有变化 MainClass和内部类具有“has-a”关系,如果使用list of list的元组,则无法理解该关系。 创建不同的类是提高可读性和保持代码整洁的最佳实践。
谢谢

你不认为把东西放在一起就足够了吗?在.NET2.0中,我认为没有。在.NET4.0中有很多机会。不,一门课就是为了这个。封装。保持一个类在一个小范围内保存某些内容并不“难看”。保持简单并恰当命名。@PeterRitchie:我很确定Visual Studio编辑器的版本在语言功能2.0方面真的不重要。在这种情况下,你不认为把东西放在一起就足够了吗?在.Net 2.0中,我认为没有。在.NET4.0中有很多机会。不,一门课就是为了这个。封装。保持一个类在一个小范围内保存某些内容并不“难看”。保持简单,并适当命名。@PeterRitchie:我很确定版本
Visual Studio的n编辑器在语言功能方面实际上并不重要,在本例中为2.0+1-不知道谁投了反对票,但这是完全正确的。创建对象的目的是将数据和行为组合在一起。+1-不知道谁投了反对票,但这是完全正确的。创建对象的目的是将数据和行为组合在一起。