gpt4 book ai didi

c# - 我怎样才能不笨拙地/乏味地阻止将空字符串写入类(class)成员的尝试?

转载 作者:太空宇宙 更新时间:2023-11-03 23:37:45 24 4
gpt4 key购买 nike

我有一个代表 Sharepoint 列表的类,如下所示:

private class ListColumns
{
public String li_requestDate { get; set; }
public String li_paymentAmount { get; set; }
public String li_payeeName { get; set; }
public String li_remitAddressOrMailStop { get; set; }
. . .

我阅读以前保存到 Sharepoint 列表的项目是这样的:

private List<ListColumns> ReadFromList()
{
List<ListColumns> lcList = new List<ListColumns>();

using (SPSite site = new SPSite(siteUrl))
{
using (SPWeb web = site.RootWeb)
{
SPList list = web.Lists[listTitle];
SPListItemCollection SpListColl = list.Items;
foreach (SPListItem item in SpListColl)
{
ListColumns lc = new ListColumns();
lc.li_requestDate = item["RequestDate"].ToString();
lc.li_payeeName = item["PayeeName"].ToString();
lc.li_remitAddressOrMailStop = item["RemitAddressOrMailStop"].ToString();
. . .

如果分配给类成员的值是空字符串,则此代码会崩溃 - IOW,尝试将空字符串分配给这些类成员中的任何一个会导致 ReadFromList() 的 catch 方法充当 GOTO 语句指向已经达到了它(并且没有收集 200 美元 - 或任何数额,就此而言)。

我可以用像这样笨拙/乏味的代码来防止这种情况:

if (!(String.IsNullOrEmpty(item["RequestDate"].ToString())))
{
lc.li_requestDate = item["RequestDate"].ToString();
}
if (!(String.IsNullOrEmpty(item["PayeeName"].ToString())))
{
lc.li_payeeName = item["PayeeName"].ToString();
}
. . .

(等等等等。与 friend 的广告词等令人作呕)

...但是有一个暗示必须有一个“更好”的方法。谁能具体证实我的直觉?

更新

尝试 Alex 的代码:

item.SetAsString("RequestDate", x => lc.li_requestDate = x);

如果值为空,我仍然得到“对象引用未设置到对象的实例”。

MatteoSP 的代码:

Apply(item, "RequestDate", x => lc.li_requestDate = x);

...甚至无法编译;我收到两条错误消息:

“DirectPaymentSectionsWebPart.DPSVisualWebPart.DPSVisualWebPartUserControl.Apply(System.Collections.Generic.IDictionary, string, System.Action)”的最佳重载方法匹配有一些无效参数

-和:

参数 1:无法从“Microsoft.SharePoint.SPListItem”转换为“System.Collections.Generic.IDictionary”

更新 2

我笨拙/冗长的代码,我认为它至少可以工作:

if (!(String.IsNullOrEmpty(item["RemitAddressOrMailStop"].ToString())))
{
lc.li_remitAddressOrMailStop = item["RemitAddressOrMailStop"].ToString();
}

...也因迟钝的“对象引用未设置为对象的实例”而失败。

在写入 List 时,是否有必要通过向每个否则为空的值写入一个“”(空格)来进一步提升 Kludginess?

更新 3

我也尝试过这个想法here由 Shaw 发布,但具有相同的旧结果(崩溃,“对象引用未设置为对象的实例”)

最佳答案

如何使用扩展方法

public static class ListItemExtensions
{
public static void SetAsString(this SPListItem item, string colName, Action<string> destSetter)
{
if (item != null)
{
var col = item[colName];
if (col != null)
{
var colVal = col.ToString();
if (!string.IsNullOrEmpty(colVal))
destSetter(colVal);
}
}
}
}

用法:

 item.SetAsString("RequestDate", x => lc.li_requestDate = x);

关于c# - 我怎样才能不笨拙地/乏味地阻止将空字符串写入类(class)成员的尝试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30064289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com