小编Tho*_*ser的帖子

根据类型参数调用泛型方法中的不同方法

我有几个这样的方法:

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为每种类型明确实现?

.net c# generics

2
推荐指数
1
解决办法
2323
查看次数

为什么在使用Linq时需要初始化out变量

假设我有一个字符串,我想转换为整数,我会这样做

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初始化为任意值时,它会按预期编译和工作.但为什么我必须这样做?

c# linq

2
推荐指数
1
解决办法
253
查看次数

LINQ 求和语法

我正在寻找对一列进行简单的求和。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 中的双精度。

我的语法已经用完了。一定有我缺少的演员或类似的东西。有任何想法吗?

c# linq

2
推荐指数
1
解决办法
1571
查看次数

如何在卸载时强制删除应用程序数据(Android)?

某些 Android 设备(至少 Galaxy S7)有一个奇怪的功能:当应用程序重新安装时,它们会恢复数据(例如 SQLite 数据库)。此行为会中断我的应用程序,因为数据应该在卸载过程中删除。

当手动卸载应用程序时,如何强制 Android 完全删除所有数据?

android

2
推荐指数
1
解决办法
2168
查看次数

Parallel.Foreach 和 for every 产生不同的结果:为什么我的代码不安全?

我有一个文本文件,我将其读取为字符串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没有产生。

为什么我的代码不是线程安全的?

c# concurrency thread-safety parallel.foreach

2
推荐指数
1
解决办法
315
查看次数

这个lambda表达式可以变得更简单吗?

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)

c# lambda

1
推荐指数
1
解决办法
105
查看次数

从路径中删除空格

我有一个路径如下所示的字符串:

"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)

我已经尝试过TrimReplace以及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)

但这并没有给我想要的结果。我怎样才能做到这一点?

c# function path

1
推荐指数
1
解决办法
165
查看次数

列表只返回第一个值

我有一个简单的程序,我可以在其中输入姓名,一旦按下 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)

但是,我一直只返回名字,甚至不返回“喜欢你的帖子”部分。我试图调试它,我总是在列表中看到正确数量的项目,但仍然是错误的。

你能指出这个问题吗?

c#

1
推荐指数
1
解决办法
105
查看次数

我怎样才能得到真正的价值?

在此处输入图片说明 在此处输入图片说明

这是所有的代码:

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. 我怎样才能得到真正的价值?我怎样才能得到每个索引?

c# groupbox

1
推荐指数
1
解决办法
65
查看次数

如何检查列表中对象的属性是否相等?

我的列表中有两个对象,并且希望确保这些对象的所有属性都具有相同的值。

例如:

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。我无法理解为什么会这样,并且想知道如何正确地做到这一点。

.net c# .net-core

1
推荐指数
1
解决办法
1913
查看次数