有没有办法缩短下面的代码。 (期望超过20个值)
值将始终保持相同的顺序。
string[] values = line.Split(',');
LogEntry entry = new LogEntry()
{
Id = values[0],
Service = values[1],
Name = values[2],
Process = values[3],
type = values[4]
[...]
};
答案 0 :(得分:1)
我个人不知道这样做的简化方法 - 这个代码需要存在的地方。但是,您可以使用AutoMapper之类的映射器解决方案来设置映射。至少你的处理程序或操作不会因为赋值逻辑而变得臃肿。
希望这有点帮助。
期待阅读其他答案。
答案 1 :(得分:1)
您可以使用一个参数LogEntry
添加到string line
构造函数,并将逻辑移到构造函数中。
然后代码看起来像
LogEntry entry = new LogEntry(line);
在构造函数中是这样的:
public void LogEntry(string line)
{
string[] values = line.Split(',');
Id = values[0],
Service = values[1],
Name = values[2],
Process = values[3],
type = values[4]
[...]
}
此代码必须在某处。 是否更好的解决方案取决于具体情况。如果您经常使用对象初始化程序,那将大大简化代码。如果你不这样做可能没什么区别。
答案 2 :(得分:0)
根据您的问题,您正试图避免设置值的那20行。使用如下所示的基于反射的解决方案怎么样?
int retryCount = 0, retryLimit = 5;
while (retryCount < retryLimit) { //repeats the waiting as long as it is within the retry limit
if (server.Available > 0) //check for the available byte first, please change 0 with number of bytes which you expected
byteCount = server.Receive(bytes, server.Available, SocketFlags.None); //only read when byte is available
retryCount++;
//Log the retry count here if your wish: clsError.LogError("Retry Count: " + retryCount.ToString(), "Retry attempt to get response");
if (byteCount > 0 && retryCount < retryLimit) //if there is byte received at this point or condition violated, break
break;
System.Threading.Thread.Sleep(1000); //no byte received re-check in another second;
}
if (byteCount <= 0) { // no byte received
clsError.LogError("TestSMS:SendReceiveTest()", "No Acknowledgement recieved");
return -1; //change this with your own error code
} //passing this point means you receive something