我正在创建各种联系人的SelectList。我希望显示的文本是FirstNameMiddleInit(如果可能)和LastName的组合。

IEnumerable<SelectListItem> items = contacts
.Select(r => new SelectListItem()
{
    Value = r.ContactID.ToString(),
    Text = r.FirstName + " "
    + string.IsNullOrEmpty(r.MiddleInit) ? r.MiddleInit + ". " : ""
    + r.LastName
});

我收到错误消息:
Error   4   Cannot implicitly convert type 'string' to 'bool'   C:\Users\cu551d\Documents\Visual Studio 2010\Projects\WVM\WVM\Controllers\SOWController.cs  181 15  WVM

我猜想这与我的语法有关。我可以在C#中执行类似的操作吗?

另外,我应该在Trim()上包含MiddleInit语句吗?我认为此错误非常奇怪,因为IsNullOrEmpty实际上确实返回了 bool 值。我也尝试过(string.IsNullOrEmpty(r.MiddleInit) == true ) ..

最佳答案

尝试在括号中分组。看起来您正在向后执行条件运算符:

IEnumerable<SelectListItem> items = contacts
.Select(r => new SelectListItem()
{
    Value = r.ContactID.ToString(),
    Text = r.FirstName + " " +
        (string.IsNullOrEmpty(r.MiddleInit) ? "" : (r.MiddleInit + ". ")) +
        r.LastName
});

另一种技术

由于无论如何都将其转换为空字符串,因此您也可能会考虑以下情况:
Text = r.FirstName + " " + (r.MiddleInit ?? "") + r.LastName
??称为Null Coalescing Operator。如果该值不为null,它将返回左侧的任何内容,否则返回右侧的任何内容。

http://msdn.microsoft.com/en-us/library/ms173224.aspx

编辑:虽然比较干净,但是这对于您的情况不太有用,因为您需要在初始字母之后加上句点。但是要知道它确实存在!

关于c# - 用三元运算符进行字符串连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13713212/

10-10 18:28
查看更多