c# - 无法从 void 类型隐式转换为 Systems.Collections.Generics.List<>
问题描述
我正在尝试使用 string.Equals 将新对象添加到对象列表中,并出现如下转换错误
这是我的对象:
public class TestNode : CSVBaseModel
{
public int DatabaseID { get; set; }
public string EntityType { get; set; } //make object
public string Name { get; set; }
public int StepNumber { get; set; }
public virtual Job JobModel { get; set; }
public TestNode(int databaseID, string entityType, string name, int stepNumber)
{
DatabaseID = databaseID;
EntityType = entityType;
Name = name;
StepNumber = stepNumber;
}
}
还有我的清单:
List<TestNode> testNodes = new List<TestNode>();
这是错误发生的地方(在冒号之后,在语句中):
job.TestNodes = string.IsNullOrEmpty(columns[2]) ? job.TestNodes : testNodes.Add(new TestNode(nodeCounter += 1, "JobExecutor", columns[2], 0));
谁能告诉我为什么它不会转换?任何帮助,将不胜感激。
编辑 :
TestNodes 是另一个对象的通用列表属性。testNodes 是一个特定于正在编译的 byteArray 的列表。我希望这是有道理的。也许这提供了一个更好的背景:
private Job ProcessFile2(byte[] filestream)
{
List<TestNode> testNodes = new List<TestNode>();
Job job = new Job();
Guid uniqueRecordId = Guid.NewGuid();
StreamReader streamReader = new StreamReader(new MemoryStream(filestream), System.Text.Encoding.UTF8, true);
DateTime creationDate = DateTime.Now;
int nodeCounter = 0;
string line;
int linecounter = 0;
while ((line = streamReader.ReadLine()) != null)
{
if (linecounter > 1)
{
var columns = line.Split(",");
job.JobName = string.IsNullOrEmpty(columns[1]) ? job.JobName : columns[1];
job.TestNodes = string.IsNullOrEmpty(columns[2]) ? job.TestNodes : new List<TestNode> { new TestNode(nodeCounter += 1, "JobExecutor", columns[2], 0) };
job.TestNodes= string.IsNullOrEmpty(columns[3]) ? job.TestNodes : testNodes.Add(new TestNode(nodeCounter += 1, "OrganisationType", job.OrganisationType, 0));
job.ContractingOrganisationType = string.IsNullOrEmpty(columns[4]) ? job.ContractingOrganisationType : columns[4];
job.TestNodes = string.Equals(columns[0], "Job Step") ? testNodes.Add(new TestNode(nodeCounter += 1, "StepName", columns[6], Convert.ToInt32(columns[5]))) : job.TestNodes;
job.TestNodes = string.Equals(columns[0], "Custom Input") ? testNodes.Add(new TestNode(nodeCounter += 1, "InputName", columns[6], Convert.ToInt32(columns[5]))) : job.TestNodes;
job.TestNodes = string.Equals(columns[0], "Custom Output") ? testNodes.Add(new TestNode(nodeCounter += 1, "OutputName", columns[6], Convert.ToInt32(columns[5]))) : job.TestNodes;
job.TestNodes = string.Equals(columns[0], "Generic Input") ? testNodes.Add(new TestNode(nodeCounter += 1, "GenericInputName", columns[6], Convert.ToInt32(columns[5]))) : job.TestNodes;
job.Record = uniqueRecordId;
job.CreationDate = creationDate;
job.ModificationDate = creationDate;
job.CreateBy = "System";
job.ModifyBy = "System";
}
linecounter++;
}
return job;
}
解决方案
您对三元运算符的使用...
job.TestNodes = string.IsNullOrEmpty(columns[2]) ? job.TestNodes : testNodes.Add(new TestNode(nodeCounter += 1, "JobExecutor", columns[2], 0));
...有效地像这样工作...
if (string.IsNullOrEmpty(columns[2]))
{
job.TestNodes = job.TestNodes;
}
else
{
job.TestNodes = testNodes.Add(new TestNode(nodeCounter += 1, "JobExecutor", columns[2], 0));
}
该List<>.Add()
方法具有此签名...
public void Add (T item);
void
意味着它不返回任何东西。您不能将void
方法的结果分配给其他存储,因为没有要分配的结果。(请注意,这与碰巧返回的方法不同null
。)
要解决此问题,请分别执行您的调用Add()
和后续List<>
分配...
if (string.IsNullOrEmpty(columns[2]))
{
job.TestNodes = job.TestNodes;
}
else
{
testNodes.Add(new TestNode(nodeCounter += 1, "JobExecutor", columns[2], 0));
job.TestNodes = testNodes;
}
由于块的true
分支if
实际上是一个空操作,我们可以简单地重写它......
if (!string.IsNullOrEmpty(columns[2]))
{
testNodes.Add(new TestNode(nodeCounter += 1, "JobExecutor", columns[2], 0));
job.TestNodes = testNodes;
}
根据job.TestNodes
分配方式,可能需要改为...
job.TestNodes = testNodes;
if (!string.IsNullOrEmpty(columns[2]))
{
testNodes.Add(new TestNode(nodeCounter += 1, "JobExecutor", columns[2], 0));
}
推荐阅读
- javascript - 可重用组件 React Native 的设置状态问题
- database-design - NoSQL 数据库设计 - 可重复数据
- mysql - 无法使 Django 原始 sql 正常工作
- javascript - 如何禁用自动完成输入类型密码?不工作自动完成=“关闭”
- python - PLMXML 与 Python?
- clojure - Clojure 服务之间的通信
- azure - Azure Kusto - 在来自跟踪的消息字段上使用 extract()
- docker - 如何在 Docker 下运行 Gnome-Shell?
- python - 如何将函数应用于数据框
- android - 对于 Android Spotify API,如何将专辑 artowrk 图像放入 imageView?我尝试过使用 Track 但效果不佳