[英]How to use Lambda Expression as a String parameter C#
出於好奇,我想知道是否可以使用Lambda表達式作為String參數?
這是我的摘錄:
List<Int64> selectedUsers = GetSelectedUsers();
if (MessageBox.Show(this, ((String message) =>
{
message = "Are you sure you want to delete user(s) ID";
foreach (Int64 id in selectedUsers)
{
message += " " + id.ToString();
}
message += "?";
return message;
}), "Confirmation Delete User", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
//DoSomething();
}
但是,不幸的是,我在這里收到此錯誤“錯誤7無法將lambda表達式轉換為類型'string',因為它不是委托類型” :(字符串消息)
感謝您的幫助,我們非常感謝!
建立您的信息之前
string ids = selectedUsers.Select(n=>n.ToString()).Aggregate((current, next) => current + ", " + next);
// also works string.Join
// string ids = string.Join(", ",selectedUsers);
string message = "Are you sure you want to delete user(s) ID: "+ids+"?";
if (MessageBox.Show(this, message, "Confirmation Delete User", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
//DoSomething();
}
如果您真的想使用某種委托來返回字符串(老實說,我不確定您為什么會在這里),則需要將表達式轉換為Func<string>
並立即調用它。
if (MessageBox.Show(this,
((Func<string>)(() =>
{
var message = "Are you sure you want to delete user(s) ID";
foreach (Int64 id in selectedUsers)
{
message += " " + id.ToString();
}
message += "?";
return message;
})
)(),
"Confirmation Delete User", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
//DoSomething();
}
}
我認為這是你應該做的
List<Int64> selectedUsers = GetSelectedUsers();
if (MessageBox.Show(this, ((Func<string, string>)(message =>
{
message = "Are you sure you want to delete user(s) ID";
foreach (Int64 id in selectedUsers)
{
message += " " + id.ToString();
}
message += "?";
return message;
}))(""), "Confirmation Delete User", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
//DoSomething();
}
}
我們這里有一個IFFE。 作為一種優化,您可以擺脫message參數,因為您並沒有真正使用初始值。 這將變成:
List<Int64> selectedUsers = GetSelectedUsers();
if (MessageBox.Show(this, ((Func<string>)(() =>
{
var message = "Are you sure you want to delete user(s) ID";
foreach (Int64 id in selectedUsers)
{
message += " " + id.ToString();
}
message += "?";
return message;
}))(), "Confirmation Delete User", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
//DoSomething();
}
我希望這有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.