因为我最终需要在屏幕上显示,所以该字段是过滤后的字段。
我不想使用new ListLSD
,new ListMPS
等。
我需要共享变量new List
。
[Serializable]
public class DiseasesDataInfo
{
public String FAB { set; get; }
public String GAA { set; get; }
/* ... */
}
var newList = null; // Can't be set to null?
switch (ddlDiseases.SelectedValue)
{
case DiseasesCollections.LSD:
newList = ImportExcleInfoList.Select(x => new
{
x.GAA, x.GAAratio, x.GAAInhibition, x.GAAStatus,
x.FAB, x.FABratio, x.FABStatus,
x.GD, x.GDratio
}).ToList();
gvAdvanced.DataSource = newList;
break;
// etc.
}
gvAdvanced.DataBind();
答案 0 :(得分:2)
您不能将var
用作null。您必须指定类型,因为编译器无法推断出它。在Linq查询中创建匿名类型时,您可能必须使用类似以下内容的方法:
IList newList = null;
switch (ddlDiseases.SelectedValue)
{
case DiseasesCollections.LSD:
newList = ImportExcleInfoList.Select(x => new
{
x.GAA, x.GAAratio, x.GAAInhibition, x.GAAStatus,
x.FAB, x.FABratio, x.FABStatus,
x.GD, x.GDratio
}).ToList();
gvAdvanced.DataSource = newList;
break;
// etc.
}
似乎您也可以创建指定类的实例:
IList<DiseasesDataInfo> newList = null;
// [...]
newList = ImportExcleInfoList.Select(x => new DiseasesDataInfo { GAA = x.GAA /* ... */}).ToList();
gvAdvanced.DataSource = newList;
如果在切换块之外的其他地方不需要newList
,也可以直接分配结果:
gvAdvanced.DataSource = ImportExcleInfoList.Select(x => new DiseasesDataInfo { GAA = x.GAA /* ... */}).ToList();
答案 1 :(得分:2)
在变量的使用范围之外声明变量,或者对不同的作业使用相同的变量是一个坏主意。在这种情况下,变量的值一次 not 不在单个[DataMember]
public Int32 RequestId
{
get { return requestId; }
set { requestId = value; }
}
[DataMember]
public string StatusCode
{
get { return statusCode; }
set { statusCode = value; }
}
[DataMember]
public List<string> ErrorMessages
{
get { return errorMessages; }
set { errorMessages = value; }
}
[DataMember]
public string PeriodStatus
{
get { return status; }
set { status = value; }
}
[DataMember]
public string PhoneNumber
{
get { return status; }
set { status = value; }
}
块之外使用。应该在每个case
块中同时声明和分配该变量,例如:
case
列表也可以直接分配给switch (ddlDiseases.SelectedValue)
{
case DiseasesCollections.LSD:
var lsdList = ImportExcleInfoList.Select(x => new
{
x.GAA, x.GAAratio, x.GAAInhibition, x.GAAStatus,
x.FAB, x.FABratio, x.FABStatus,
x.GD, x.GDratio
}).ToList();
gvAdvanced.DataSource = lsdList;
break;
case DiseasesCollections.MPS:
var mspList = ImportExcleInfoList.Select(x => new
{
x.MPS2, x.MPS2ratio, x.MPS2Status,
x.MPS3B, x.MPS3Bratio, x.MPS3BStatus
}).ToList();
gvAdvanced.DataSource = mpsList;
break;
}
gvAdvanced.DataBind();
:
gvAdvanced.DataSource
答案 2 :(得分:1)
您可以将var
设置为null
,因为C#是强类型的。引入var
是为了允许我们为引用分配匿名类型,尽管我们可以将var
与其他数据类型一起使用,只要编译器可以解析var
应该是的类型即可。这就是为什么我们不能这样做:
var v;
由于编译器不知道var
是什么,在以下情况下,编译器将确定var
实际上是string
:
var s = "";
在您的情况下,将var
设置为null
是编译器无法解决的,因为它可能是任何采用null
值(即任何引用类型)的东西,编译器不知道您想要一个列表,而是应该使用一个空列表:
var myList = new List<T>();
myList = null;
或者更好,只需声明一下即可:
List<T> myList = null;
供参考,var
的使用方式如下,以下是一个匿名类型,我们必须使用var
来使用分配和引用:
var anon = new { name = "", description = "" };
答案 3 :(得分:1)
虽然我不建议这样做,因为我更喜欢使用模型而不是匿名类型,但是您可以通过执行以下操作来实现它:
object newList = null; // Use object. Grid datasource accepts object
switch (ddlDiseases.SelectedValue)
{
case DiseasesCollections.LSD:
newList = ImportExcleInfoList.Select(x => new
{
x.GAA, x.GAAratio, x.GAAInhibition, x.GAAStatus,
x.FAB, x.FABratio, x.FABStatus,
x.GD, x.GDratio
}).ToList();
break;
case DiseasesCollections.MPS:
newList = ImportExcleInfoList.Select(x => new
{
x.MPS2, x.MPS2ratio, x.MPS2Status,
x.MPS3B, x.MPS3Bratio, x.MPS3BStatus
}).ToList();
break;
}
//****** case DiseasesCollections.Other...
gvAdvanced.DataSource = newList; //Set new list here instead on every case.
gvAdvanced.DataBind();
答案 4 :(得分:0)
您可以使用dynamic类型,这将允许您在运行时确定newList
的类型:
dynamic newList = null;
...
newList = ImportExcleInfoList.Select(x => new
{
x.GAA, x.GAAratio, x.GAAInhibition, x.GAAStatus,
x.FAB, x.FABratio, x.FABStatus,
x.GD, x.GDratio
}).ToList();
...
gvAdvanced.DataSource = newList;
它基本上告诉编译器newList
类型未知,并且可能会随着时间变化。
答案 5 :(得分:-1)
将列表初始化更改为以下内容:
List<DiseasesDataInfo> newList = null;
这应该有效。问题是您使用的是var关键字。