我是编程和学习C#的新手。本章向我介绍了数据库和SQL结构,然后迅速进入LINQ。所以我在这一点上的理解是非常基础的。我的任务:
创建一个名为SplitAlphabet的程序,其中包含您选择的20个单词的数组。使用LINQ语句显示单独的列表:一个显示在字母表的前半部分以字母开头的单词(A到M),另一个列表显示在后半部分(N到Z)以字母开头的单词。
我试图让它在LINQ中运行然后决定备份一下,然后在C#中执行它以确保我的语法正确。
private void btnDisplay_Click(object sender, EventArgs e)
{
lstResults1.Items.Clear();
lstResults2.Items.Clear();
string[] strings = {"book", "zebra"};
string subtrResult = strings[0].Substring(0,1);
var substCompare = strings[0].Compare((strings[0].Substring(0, 1)), "n");
lstResults1.Items.Add(subtrResult);
lstResults2.Items.Add(substCompare);
/*
var AM =
from x in strings
where (x.CompareTo((x.Substring(0, 1)), "n")) == -1
select x;
*/
}
substrResult
在"b"
列表框中成功显示lstResults1
。显示substcompare
变量的错误是:
无法使用。访问成员'string.Compare(string,string)' 实例参考;用类型名称来限定它。
我用int和decimal替换了var,消息保持不变。
我也不知道这是否像我希望的那样容易转换为LINQ。
答案 0 :(得分:0)
正如您从错误消息中看到 :
Member 'string.Compare(string, string)' cannot be accessed with an instance reference; qualify it with a type name instead.
您应该使用 类型名称 (即String
)而不是 实例 ({ {1}}):
strings[0]
Linq查询应该是这样的:
var substCompare = String.Compare(strings[0].Substring(0, 1), "n");
请注意, var AM =
from x in strings
where (String.Compare(x.Substring(0, 1), "n")) < 0
select x;
不一定返回Compare
,但任何负数
答案 1 :(得分:0)
小心,方法Compare是一种静态方法。您可以使用String类访问它。 像这样:
String.Compare((strings[1].Substring(0, 1)), "n");
你可以这样得到你的清单:
List<String> lstResults1 = new List<string>();
List<int> lstResults2 = new List<int>();
lstResults1.Clear();
lstResults2.Clear();
string[] strings = { "book", "zebra" };
string subtrResult = strings[0].Substring(0, 1);
var substCompare = String.Compare((strings[1].Substring(0, 1)), "n");
lstResults1.Add(subtrResult);
lstResults2.Add(substCompare);
var AM =
from x in strings
where (String.Compare((x.Substring(0, 1)), "n")) < 0
select x;
var NZ =
from x in strings
where !AM.Contains(x)
select x;