C# LINQ2SQL:如何声明var类型的成员变量?
我有一节这样的课C# LINQ2SQL:如何声明var类型的成员变量?,c#,.net,linq-to-sql,var,C#,.net,Linq To Sql,Var,我有一节这样的课 public class foo { private void getThread() { var AllThreads = from sc in db.ScreenCycles join s in db.Screens on sc.ScreenID equals s.ScreenID select s;
public class foo
{
private void getThread()
{
var AllThreads = from sc in db.ScreenCycles
join s in db.Screens on sc.ScreenID equals s.ScreenID
select s;
}
}
我想使AllThreads变量成为类变量,而不是方法变量。像这样
public class foo
{
var AllThreads;
private void getThread()
{
AllThreads = from sc in db.ScreenCycles
join s in db.Screens on sc.ScreenID equals s.ScreenID
select s;
}
}
无论如何,它不允许我声明一个var类型的类变量
如何实现这一点?您可以这样做:
public class foo {
IEnumerable<string> AllThreads;
private void getThread() {
AllThreads = (from sc in db.ScreenCycles
join s in db.Screens on sc.ScreenID equals s.ScreenID
select s.Screen1 + " " + sc.Thread);
}
}
公共类foo{
i可数所有线程;
私有void getThread(){
AllThreads=(以db.ScreenCycles为单位从sc开始)
将s加入sc.ScreenID上的db.ScreenID等于s.ScreenID
选择s.Screen1+“”+sc.Thread);
}
}
根据Joel的建议进行更新。您可以这样做:
public class foo {
IEnumerable<string> AllThreads;
private void getThread() {
AllThreads = (from sc in db.ScreenCycles
join s in db.Screens on sc.ScreenID equals s.ScreenID
select s.Screen1 + " " + sc.Thread);
}
}
公共类foo{
i可数所有线程;
私有void getThread(){
AllThreads=(以db.ScreenCycles为单位从sc开始)
将s加入sc.ScreenID上的db.ScreenID等于s.ScreenID
选择s.Screen1+“”+sc.Thread);
}
}
根据Joel的建议进行了更新。初始变量定义了一个匿名类。为了做你想做的事情,你必须定义类 但是……你可以这样做:
List<string> AllThreads;
列出所有线程;
初始变量定义了一个匿名类。为了做你想做的事情,你必须定义类
但是……你可以这样做:
List<string> AllThreads;
列出所有线程;
var只能用作本地声明。如果要使用从LINQ表达式返回的类型,必须生成一个对象 var只能用作本地声明。如果要使用从LINQ表达式返回的类型,必须生成一个对象 要保留原始代码,请尝试以下操作
public class foo
IEnumerable<ScreenCycles> AllThreads;
private void getThread()
{
AllThreads = from sc in db.ScreenCycles
join s in db.Screens on sc.ScreenID equals s.ScreenID
select s;
}
}
公共类foo
i可数所有线程;
私有void getThread()
{
AllThreads=来自sc,单位为db.ScreenCycles
将s加入sc.ScreenID上的db.ScreenID等于s.ScreenID
选择s;
}
}
要保留原始代码,请尝试以下操作
public class foo
IEnumerable<ScreenCycles> AllThreads;
private void getThread()
{
AllThreads = from sc in db.ScreenCycles
join s in db.Screens on sc.ScreenID equals s.ScreenID
select s;
}
}
公共类foo
i可数所有线程;
私有void getThread()
{
AllThreads=来自sc,单位为db.ScreenCycles
将s加入sc.ScreenID上的db.ScreenID等于s.ScreenID
选择s;
}
}
您不能在类级别使用var
。如果不能立即初始化,则需要提供显式类型
假设“s”为类型名称“Screen”:
公共类foo
{
i可数所有线程;
私有void getThread()
{
AllThreads=来自sc,单位为db.ScreenCycles
将s加入sc.ScreenID上的db.ScreenID等于s.ScreenID
选择s;
}
}
您不能在类级别使用var
。如果不能立即初始化,则需要提供显式类型
假设“s”为类型名称“Screen”:
公共类foo
{
i可数所有线程;
私有void getThread()
{
AllThreads=来自sc,单位为db.ScreenCycles
将s加入sc.ScreenID上的db.ScreenID等于s.ScreenID
选择s;
}
}
正如许多人所说,您不能使用var。请重构代码以使用Linq类型
public class foo
{
ScreenCycle[] allThreads;
private void getThread()
{
allThreads = (from sc in db.ScreenCycles join s in db.Screens on sc.ScreenID
equals s.ScreenID select s).ToArray();
}
}
正如许多人所说,您不能使用var。重构代码以使用Linq类型
public class foo
{
ScreenCycle[] allThreads;
private void getThread()
{
allThreads = (from sc in db.ScreenCycles join s in db.Screens on sc.ScreenID
equals s.ScreenID select s).ToArray();
}
}
好的,这不是一个答案,只是stackoverflow问题的一个相对新手,这篇文章很好地说明了这一点
此站点上的代码标记工具严重。。。嗯,独一无二。我不明白的是,为什么我们所有的注释代码块都很长?这是OP做的吗?我对前面的示例进行了各种编辑,由于某种原因,我的代码所在的文本框比它的内容长得多。(IE 8)好的,这不是一个答案,只是stackoverflow问题的一个相对新手,这篇文章很好地说明了这一点
此站点上的代码标记工具严重。。。嗯,独一无二。我不明白的是,为什么我们所有的注释代码块都很长?这是OP做的吗?我对前面的示例进行了各种编辑,由于某种原因,我的代码所在的文本框比它的内容长得多。(即8)关闭,但最好避免使用.ToList()。此外,我认为他没有返回字符串。啊,他改变了问题。。。否则我会像@TheLameDuckClose那样做,但最好避免使用.ToList()。此外,我认为他没有返回字符串。啊,他改变了问题。。。否则我会像@TheLameDucks那样做看起来他选择的是“Screens”而不是“ScreenCycles”值得指出的是原始类设计有缺陷,并且通常不应该返回IEnumerable吗?诚然,你的回答对所问的问题是正确的,但最终,这个建议从根本上是有缺陷的(这是问题的直接结果)。通常,您应该返回IEnumerable,除非您有充分的理由返回一个不太通用的类型。然而,存储依赖于实时数据库连接的IEnumerable而不首先调用数组或列表可能不是一个好主意。看起来他选择的是“Screens”而不是“ScreenCycles”,是否值得指出原始类设计有缺陷,并且通常不应返回IEnumerable?诚然,你的回答对所问的问题是正确的,但最终,这个建议从根本上是有缺陷的(这是问题的直接结果)。通常,您应该返回IEnumerable,除非您有充分的理由返回一个不太通用的类型。然而,存储一个依赖于实时数据库连接的IEnumerable而不首先调用ToArray或ToList可能不是一个好主意。没有“类型var”这样的东西,因为var实际上不是一个类型,而是一个能说明问题的关键字