gpt4 book ai didi

c# - 在 try catch c# 中使用匿名类型

转载 作者:太空狗 更新时间:2023-10-30 00:29:31 24 4
gpt4 key购买 nike

多年来我一直在努力解决这个问题,通常只是围绕它编写代码,但现在是解决它的时候了。

我正在声明一个返回新匿名类型的 var,并希望将其放入 try/catch 中。但是,这样做意味着它超出了范围,并且显然不能被后面的代码看到。通常我只是先声明它,然后将代码包装在 try/catch 中,然后在其中重新分配,例如:

int result = 0;

try
{
result = 77; //real code goes here
}
catch (Exception)
{
throw;
}

但这是我的真实代码,我不知道如何做这样的事情:


try
{
var dt_stop = (from s in cDb.DistributionStopInformations
join r in cDb.DistributionRouteHeaders on s.RouteCode equals r.RouteCode
where r.RouteDate == s.RouteDate &&
r.BranchId == s.BranchId &&
(r.CompanyNo == companyNo && s.CompanyNo == companyNo)
&& s.UniqueIdNo == uniqueId

select new
{
s,
r
}).Single();
}
catch (Exception)
{ //no this will not be blank
throw;
}

更新:在此之后我确实广泛使用了 dt_stop,我想知道分配数据是否有问题。

我创建了以下类:

 public class StopData
{
public DistributionStopInformation S { get; set; }

public DistributionRouteHeader R { get; set; }
}

然后我尝试使用如下:

 StopData dt_stop = null;

try
{
dt_stop = (from S in cDb.DistributionStopInformations
join R in cDb.DistributionRouteHeaders on S.RouteCode equals R.RouteCode
where R.RouteDate == S.RouteDate &&
R.BranchId == S.BranchId &&
(R.CompanyNo == companyNo && S.CompanyNo == companyNo)
&& S.UniqueIdNo == uniqueId

select new StopData
{
S,
R
}).Single();

}
catch (Exception)
{
//YES....THERE WILL BE CODE HERE
throw;
}

我得到 无法使用集合初始化程序初始化类型“StopData”,因为它没有实现“System.Collections.IEnumerable”

最佳答案

匿名类型是避免你给它们命名的语法糖。编译器使用匿名类型让您专注于您希望程序执行的操作。

出于这个原因,如果您最终引用了一个匿名类型,则意味着它不再是匿名的:)只需给它一个名字,您的问题就会消失:

MyType dt_stop = null;
try
{
dt_stop = (from s in cDb.DistributionStopInformations
join r in cDb.DistributionRouteHeaders on s.RouteCode equals r.RouteCode
where r.RouteDate == s.RouteDate &&
r.BranchId == s.BranchId &&
(r.CompanyNo == companyNo && s.CompanyNo == companyNo)
&& s.UniqueIdNo == uniqueId

select new MyType
{
s,
r
}).Single();
}
catch (Exception)
{
// here dt_stop can be used
throw;
}

MyType 可以是 System.Tuple 或标准类。为了保留语义,您可以将其设为 DTO(填写您的类型,因为我无法从您的来源推断出它们):

internal sealed class MyType
{
public <The type of s> S {get; set;}
public <The type of r> R {get; set;}
}

关于c# - 在 try catch c# 中使用匿名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56988138/

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