C# 我可以避免在这里创建类吗?
我使用的是.NET framework 2.0,我有一个类,如:C# 我可以避免在这里创建类吗?,c#,.net,C#,.net,我使用的是.NET framework 2.0,我有一个类,如: class MyThing { private int val; private DateTime date; private Guid id; public MyThing(..) { ... } } 这个类存在的唯一原因是因为在代码中的某个时刻,我需要跟踪列表。然而,虚构并没有任何真正的目的,只是作为一个将我的数据保存在一个方法中的地方,所以为它创建一个类感觉很难看。我不想创建一个列表,因为这也很难看 还
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-不知道谁投了反对票,但这是完全正确的。创建对象的目的是将数据和行为组合在一起。