我喜欢元组.它们允许您快速将相关信息分组在一起,而无需为其编写结构或类.这在重构非常本地化的代码时非常有用.
然而,初始化它们的列表似乎有点多余.
var tupleList = new List<Tuple<int, string>>
{
Tuple.Create( 1, "cow" ),
Tuple.Create( 5, "chickens" ),
Tuple.Create( 1, "airplane" )
};
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法?我希望得到一个类似于字典初始化器的解决方案.
Dictionary<int, string> students = new Dictionary<int, string>()
{
{ 111, "bleh" },
{ 112, "bloeh" },
{ 113, "blah" }
};
Run Code Online (Sandbox Code Playgroud)
我们不能使用类似的语法吗?
有没有办法声明匿名类型的列表对象.我的意思是
List<var> someVariable = new List<var>();
someVariable.Add(
new{Name="Krishna",
Phones = new[] {"555-555-5555", "666-666-6666"}}
);
Run Code Online (Sandbox Code Playgroud)
这是因为我需要在运行时创建一个集合.提前致谢
是否可以在C#中创建System.Collections.Generic.Dictionary<TKey, TValue>where TKey无条件类,以及TValue- 具有许多属性的匿名类,例如 - 数据库列名和它的本地化名称.
像这样的东西:
new { ID = 1, Name = new { Column = "Dollar", Localized = "??????" } }
Run Code Online (Sandbox Code Playgroud) 有时我需要使用一个元组,例如我有坦克和他们的目标坦克列表(他们追逐他们或类似的东西):
List<Tuple<Tank,Tank>> mylist = new List<Tuple<Tank,Tank>>();
Run Code Online (Sandbox Code Playgroud)
然后当我遍历列表时,我访问它们
mylist[i].item1 ...
mylist[i].item2 ...
Run Code Online (Sandbox Code Playgroud)
这是非常令人困惑的,我总是忘记什么是item1和什么是item2,如果我可以通过以下方式访问它们:
mylist[i].AttackingTank...
mylist[i].TargetTank...
Run Code Online (Sandbox Code Playgroud)
它会更清楚,有没有办法在没有定义类的情况下完成它:
MyTuple
{
public Tank AttackingTank;
public Tank TargetTank;
}
Run Code Online (Sandbox Code Playgroud)
我想避免定义这个类,因为那时我将不得不在不同的场景中定义许多不同的类,我可以做一些"技巧"并使这个匿名.
就像是 :
var k = new {Name = "me", phone = 123};
mylist.Add(k);
Run Code Online (Sandbox Code Playgroud)
当然,我定义它时没有类型传递给List的问题
嗨,我需要找到一种方法来声明一个方法的匿名类型.这是我的代码:
public List<var> ListOfProducts(string subcategory)
{
var products = (from p in dataContext.Products
join s in dataContext.SubCategories.Where(x => x.SubCatName == subcategory)
on p.SubcatId equals s.SubCatId
join b in dataContext.Brands on p.BrandId equals b.BrandId
select new
{
Subcategory = s.SubCatName,
Brand = b.BrandName,
p.ProductName,
p.ProductPrice
});
return products;
}
Run Code Online (Sandbox Code Playgroud)
我不知道我应该为该方法设置List的类型.在这种情况下我该怎么办?
.SelectMany当你并不总是想要返回一个结果时,我一直在努力寻找一个"干净"的模式来处理匿名类型.我最常见的用例如下所示:
.SelectMany例如,逻辑可能看起来像这样:
//c is a customer
var context = GetContextForCustomer(c);
// look up some data, myData using the context connection
if (someCondition)
return myData.Select(x => new { CustomerID = c, X1 = x.x1, X2 = x.x2 });
else
return null;
Run Code Online (Sandbox Code Playgroud)
这可以作为foreach声明实现:
var results = new List<WhatType?>();
foreach (var c in customers) {
var context = GetContextForCustomer(c);
if (someCondition)
results.AddRange(myData.Select(x => new { CustomerID = c, X1 = x.x1, X2 = x.x2 }));
} …Run Code Online (Sandbox Code Playgroud) 我是新来anonymous types的C#,我想创建一个list中anonymous types包含3个变量:string str,int num,DataTime time。
但是,当我尝试使用此问题的答案中的代码时: 匿名类的一般列表 对我不起作用。
我使用了一种简单的方法Console application,但我认为我得到了错误,因为我没有,System.Core因为有人在上述问题的评论中说:
(当然,您还需要引用System.Core。)
我不知道是什么System.Core,如果有的话,可能是问题所在
我使用Systme.Linq。
这是代码:
var list = new[] { str, num, time }.ToList();
list.add("hi", 5, DateTime.Now);
Console.WriteLine(list[0].num);
Run Code Online (Sandbox Code Playgroud)
我也遇到问题时,我试图指定type的variables
例如string str。
我希望通过在嵌套循环中迭代其他两个列表来构建匿名类型列表。
var myList = new List<???>();
foreach (object x in GetAllX())
{
if (Process(x))
{
foreach (object y in GetAllY(x))
{
myList.Add(new {
X = x,
Y = y
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用ToList(),构造一个匿名类型列表(请参阅此问题),但我不知道如何在上述情况下使用它。
请注意,我无法更改GetAllX和GetAllY方法。
也许这很简单,但我没有使用Type它的类型和它的用途.
假设我想List<T>用T= Double或T= 创建一个UInt32,取决于某些函数的结果,比方说public static Type CheckType(String input);
在代码中:
Type t = Program.CheckType(someInput); // it returns typeof(Double) or typeof(UInt32)
if (t == typeof(Double))
List<Double> l = new List<Double>();
else
List<UInt32> l = new List<UInt32>();
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码不会编译,因为我要让它l有两个不同的含义(一个double列表和一个unsigned int列表)......所以它引出了我的问题:
if上面的代码?与此类似的东西:
Type t = Program.CheckType(someInput);
List<t> l = new List<t>(); // I know this won't compile either...
Run Code Online (Sandbox Code Playgroud)
我的意思是,这通常会实例化一个通用List ...
先感谢您!
编辑:
这是不是重复的的 …
我需要帮助来获取对象值,例如,此对象位于对象列表中.
list<object> objectList = new list<object>();
objectList.Add( new { id = 1, name = "name1"});
objectList.Add( new { id = 2, name = "name2"});
Run Code Online (Sandbox Code Playgroud)
问题是我无法在列表中获取这些对象的值,并将它们的值放在excel文件中,我尝试了这个.
int row = 2
for(int i = 0; row < objectList ; i++){
excelRow[row,1].Value = item[i].id
excelRow[row,2].Value = item[i].name
row++
}
Run Code Online (Sandbox Code Playgroud) c# ×10
generics ×3
linq ×3
list ×3
.net ×1
.net-4.0 ×1
.net-core ×1
asp.net ×1
asp.net-mvc ×1
c#-3.0 ×1
collections ×1
dictionary ×1
tuples ×1