我有以下定义
static readonly String[,] allItems = {
{ "Alpha", null },
{ "Beta", "Magic" },
{ "Gamma", null },
// more items follow
}
在第一列中,必须将所有项初始化为一些字符串文字。在第二列中,只有一小部分项必须初始化为字符串文字而其他所有项都为空。
我现在需要添加第三列,它主要包含null
s,我很乐意省略所有这些内容。
有没有办法以某种方式省略那些null
值?
答案 0 :(得分:3)
我不确定这是否是您正在寻找的答案,但您是否考虑过使用对象。然后,您可以提供默认值,只提供不同的值。
例如
public class YourObject{
public string Name {get;set;}
public string Value {get;set;}
public string SomethingElse {get;set;}
public YourObject()
{
//provide defaults here
SomethingElse = "";
}
}
然后创建可以像这样创建的对象
static readonly List<YourObject> allItems = new List<YourObject>{
new YourObject{ Name = "Alpha" },
new YourObject{ Name = "Beta", Value = "Magic" },
new YourObject{ Name = "Gamma", SomethingElse = "Hello" }
// more items follow
}
Sriram Sakthivel在我打字时建议这样做;)
答案 1 :(得分:0)
试用清单。 这将允许您只添加必需的元素。您可以稍后在
添加更多元素列出allList = new List; allList.Add()
答案 2 :(得分:0)
您可以创建一个类,然后使用集合:
class MyClass
{
public string Prop1 {get;set;}
public string Prop2 {get;set;}
public MyClass(string prop1, string prop2 = null)
{
this.Prop1 = prop1;
this.Prop2 = prop2
}
}
现在,您可以使用List<T>
var list = new List<MyClass>()
{
new MyClass("Alpha"),
new MyClass("Beta" , "Magic"),
new MyClass("Gamme")
}
答案 3 :(得分:0)
如果您不确定列数,并且想要像表一样定义,那么我建议您使用DataTable。因此,您可以定义列类型并强制执行任何约束。这样你甚至可以使用Linq来操纵值。
以下是示例代码:
DataTable table = new DataTable();
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Patient", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
//
// Here we add five DataRows.
//
table.Rows.Add(25, "Indocin", "David", DateTime.Now);
table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
return table;
答案 4 :(得分:0)
您可以编写一个用于建模锯齿状二维数组的类,该数组可以使用集合初始值设定项进行初始化。该类必须实现IEnumerable
,并且应该有适当的Add
方法:
class Table<T> : IEnumerable<IEnumerable<T>> {
readonly List<T[]> rows = new List<T[]>();
public void Add(params T[] row) {
rows.Add(row);
}
public IEnumerator<IEnumerable<T>> GetEnumerator() {
return rows.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() {
return GetEnumerator();
}
}
然后您可以直接使用此类来实现索引器(public T this[Int32 rowIndex, Int32 columnIndex] { get { ... } }
),但更好的解决方案可能是创建一个将表转换为数组的方法:
public T[,] ToArray() {
var columnCount = rows.Max(row => row.Length);
var array = new T[rows.Count, columnCount];
for (var rowIndex = 0; rowIndex < rows.Count; rowIndex += 1)
for (var columnIndex = 0; columnIndex < columnCount; columnIndex += 1) {
var row = rows[rowIndex];
array[rowIndex, columnIndex] = columnIndex < row.Length
? row[columnIndex] : default(T);
}
return array;
}
然后,您可以使用以下代码初始化二维数组:
static readonly String[,] allItems = new Table<String> {
{ "Alpha" },
{ "Beta", "Magic" },
{ "Gamma" },
}.ToArray();