我有几个这样的方法:
public string GetStringValue(string field) { /* ... */ }
public int GetIntValue(string field) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
现在我想编写一个具有以下签名的通用方法:
public bool CopyValue<T>(string field, Action<T> copyAction)
Run Code Online (Sandbox Code Playgroud)
根据我想copyAction使用非泛型方法之一的返回值调用的类型参数。我的第一次尝试是
public bool CopyValue<T>(string field, Action<T> copyAction)
{
if (typeof(T) == typeof(string))
copyAction((GetStringValue(field));
else if (typeof(T) == typof(int))
copyAction(GetIntValue(field));
else
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
但这甚至无法编译。然后我尝试将我的非通用方法包装在通用方法中,例如
public string GetValue<string>(string field)
{
return GetStringValue(field);
}
Run Code Online (Sandbox Code Playgroud)
这显然也不能编译。
这可以完成还是我必须CopyValue为每种类型明确实现?
假设我有一个字符串,我想转换为整数,我会这样做
int i;
int.TryParse(someString, out i);
Run Code Online (Sandbox Code Playgroud)
现在我想在Linq查询中做同样的事情:
int i;
var numbers =
from s in someStrings
where int.TryParse(s, out i)
select i;
Run Code Online (Sandbox Code Playgroud)
但这拒绝编译错误
CS0165使用未分配的局部变量'i'
当我将i初始化为任意值时,它会按预期编译和工作.但为什么我必须这样做?
我正在寻找对一列进行简单的求和。SQL 将是:
Select sum(x1.On_Hand_Qty)
From Material_Location x1
Where x1.Material = '3171784-18'
Run Code Online (Sandbox Code Playgroud)
在 LINQ 中我尝试过:
var results = (from x1 in Material_Locations
where x1.Material == "3171784-18"
select new {x1.On_Hand_Qty}).Sum();
Run Code Online (Sandbox Code Playgroud)
但得到这个错误:
'System.Linq.IQueryable<AnonymousType#1>'不包含 的定义,'Sum'并且最佳扩展方法重载'System.Linq.Queryable.Sum(System.Linq.IQueryable<int>)'有一些无效参数实例参数:无法从 转换
'System.Linq.IQueryable<AnonymousType#1>'为'System.Linq.IQueryable<int>'
我试过这个:
var results = from x1 in Material_Locations
where x1.Material == "3171784-18"
select new {x1.On_Hand_Qty.Sum()};
Run Code Online (Sandbox Code Playgroud)
并得到这个错误:
无效的匿名类型成员声明符。匿名类型成员必须使用成员赋值、简单名称或成员访问来声明。
Material_Location.On_Hand_Qty是 SQL Server 中的双精度。
我的语法已经用完了。一定有我缺少的演员或类似的东西。有任何想法吗?
某些 Android 设备(至少 Galaxy S7)有一个奇怪的功能:当应用程序重新安装时,它们会恢复数据(例如 SQLite 数据库)。此行为会中断我的应用程序,因为数据应该在卸载过程中删除。
当手动卸载应用程序时,如何强制 Android 完全删除所有数据?
我有一个文本文件,我将其读取为字符串content。为了识别我想要进一步处理的文本主体,我获取字符串中关键字的索引,然后将“起始”索引设置为找到的最小索引。
我尝试过这个Parallel.ForEach...
ConcurrentBag<int> indexes = new();
int index;
switch (Case)
{
case 1:
Parallel.ForEach(KeywordTypes.GetImplementedNamedObjects(), inos =>
{
index = content.IndexOf($"/begin {inos}");
index = index == -1 ? content.Length : index;
indexes.Add(index);
});
index = indexes.Min();
return index;
Run Code Online (Sandbox Code Playgroud)
... 与foreach:
foreach (string inos in KeywordTypes.GetImplementedNamedObjects())
{
index = content.IndexOf($"/begin {inos}");
index = index == -1 ? content.Length : index;
indexes.Add(index);
}
index = indexes.Min();
return index;
Run Code Online (Sandbox Code Playgroud)
其中foreach产生预期结果但Parallel.ForEach没有产生。
为什么我的代码不是线程安全的?
var MaleCount = students.Where(Std => Std.Gender.ToUpper() == "M").Count();
var FemaleCount = students.Where(Std => Std.Gender.ToUpper() == "F").Count();
//List for storing top students records
List<StudentEntity> TopStudents = new List<StudentEntity>();
//Adding records to List
if (MaleCount > 0)
{
var maxMarksM = students.Where(o => o.Gender.ToUpper() == "M").Max(o => o.Marks);
TopStudents = students.Where(o => o.Gender.ToUpper() == "M" && o.Marks == maxMarksM).ToList();
}
if (FemaleCount > 0)
{
var maxMarksF = students.Where(o => o.Gender.ToUpper() == "F").Max(o => o.Marks);
TopStudents.AddRange(students.Where(o => o.Gender.ToUpper() == "F" && o.Marks …Run Code Online (Sandbox Code Playgroud) 我有一个路径如下所示的字符串:
"Salle de bains / 01-Points d'eau / 01-01 Vasques"
Run Code Online (Sandbox Code Playgroud)
现在我想将此路径更改为如下所示:
"Salle de bains/01-Points d'eau/01-01 Vasques"
Run Code Online (Sandbox Code Playgroud)
我已经尝试过Trim,Replace以及Substring没有成功。然后我尝试了这个方法:
private string UrlCreator(string dir)
{
string dirFinish = dir;
foreach(Char item in dirFinish)
{
if (Char.IsWhiteSpace(item) && ((item-1).Equals('/') || (item+1).Equals('/')))
{
string charToChange = item.ToString();
charToChange = "";
}
else { }
}
return dirFinish;
}
Run Code Online (Sandbox Code Playgroud)
但这并没有给我想要的结果。我怎样才能做到这一点?
我有一个简单的程序,我可以在其中输入姓名,一旦按下 Enter 键,我就会得到输入的姓名。
var names = new List<string>();
while (true)
{
Console.WriteLine("enter name");
var input = Console.ReadLine();
if (String.IsNullOrEmpty(input))
break;
names.Add(input);
}
if (names.Count == 2)
{
Console.WriteLine(names[0], names[1] + "likes your post");
}
else if (names.Count > 2 )
{
var number = names.Count;
Console.WriteLine(names[0], names[1], number + "likes your post");
}
else if (names.Count == 1)
{
Console.WriteLine(names[0] + "likes your post");
}
else
{
Console.WriteLine("nobody likes your post");
}
Run Code Online (Sandbox Code Playgroud)
但是,我一直只返回名字,甚至不返回“喜欢你的帖子”部分。我试图调试它,我总是在列表中看到正确数量的项目,但仍然是错误的。
你能指出这个问题吗?

这是所有的代码:
private void button1_Click(object sender, EventArgs e)
{
foreach (Control control in groupBox1.Controls)
{
MessageBox.Show(control.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
我只想获得true价值但没有Checked. 我怎样才能得到真正的价值?我怎样才能得到每个索引?
我的列表中有两个对象,并且希望确保这些对象的所有属性都具有相同的值。
例如:
List<Person> persons = new List<Person>
{
new Person { Id = "1", Name = "peter" },
new Person { Id = "1", Name = "peter" }
};
Run Code Online (Sandbox Code Playgroud)
现在我想知道true两个对象的属性是相同的。我尝试过以下 lambda 表达式。
var areEqual = persons.All(o => o == persons.First());
Run Code Online (Sandbox Code Playgroud)
但我要false进去了areEqual。我无法理解为什么会这样,并且想知道如何正确地做到这一点。