当出现异常时,我想确保在创建阅读器后关闭阅读器。所以我想在这个 try and catch 中包含一个 finally 括号。但是我不能在 finally 括号中关闭它,除非我在 try 括号上方声明了读者。但是如果我这样做了,我在创建阅读器时就不会捕捉到任何异常。我不确定是否关闭读者有多重要。
XmlSerializer xmlSr = new XmlSerializer(typeof(List<ProjectObject>));
try
{
FileStream reader = new FileStream(mTextFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
List<ProjectObject> addProjects = (List<ProjectObject>)xmlSr.Deserialize(reader);
mSharedDriveLocalProjects = addProjects;
reader.Close();
}
catch
{
MessageBox.Show("Failed to load XML file");
}
Run Code Online (Sandbox Code Playgroud)
以上是我的代码。用这种方式更好吗?
XmlSerializer xmlSr = new XmlSerializer(typeof(List<ProjectObject>));
FileStream reader = new FileStream(mTextFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
try
{
List<ProjectObject> addProjects = (List<ProjectObject>)xmlSr.Deserialize(reader);
mSharedDriveLocalProjects = addProjects;
}
catch
{
MessageBox.Show("Failed to load XML file");
}
finally
{
reader.Close();
}
Run Code Online (Sandbox Code Playgroud) 我做了一个简单的数字生成器,我有一个问题:生成器是否可以弹出"红色","蓝色","绿色","黄色"和"白色"而不是数字1-5?
namespace zufallsgenerator
{
public partial class Form1 : Form
{
Random r = new Random();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btnWhlie_Click(object sender, EventArgs e)
{
int summe = 0, z;
lblAnzeige.Text = " ";
while (summe <= 0)
{
z = r.Next(1, 6);
summe = summe + z;
}
lblAnzeige.Text += summe + "\n";
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一本字典
Dictionary<int, UserSession> UserSessionLookupTable
class UserSession
{
public int SessionId { get; set; }
public string UserName { get; set; }
public Guid SessionGuid { get; set; }
public DateTime LoginTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如何key=1从c#中的字典中检索值sessionGuid
根据数据库中的当前内容,会发生两件事.
如果表buildingDefine不为空,则将此表传递给构造函数.
否则将buildingDefine传递给构造函数.
这是我对数据库的检查:
//Is there content in buildingDefineTable?
if (!_bDefine.Any())
{
int currentBuildingId = ((BuildingTable)((ListView)sender).SelectedItem).Id;
var currentBool = from bla in _building
where bla.Id == currentBuildingId
select bla.BuildingBool;
//Is the buildingBool false?
if (!currentBool.First())
{
var currentBuildingDefine = from BuildingDefineTable in _bDefine
where BuildingDefineTable.buildingId == ((BuildingTable)((ListView)sender).SelectedItem).Id
select BuildingDefineTable;
await Navigation.PushAsync(new DefineBuilding(currentBuildingDefine));
}
else
{
//Do something here.
}
}
//No content in buildingDefineTable
else
{
await Navigation.PushAsync(new DefineBuilding(new IEnumerable<_bDefine> bDefineTable ));
}
Run Code Online (Sandbox Code Playgroud)
if语句工作正常,但是每当数据库不包含表中的任何信息时,我都无法传递表的空列表.
这是我的构造函数:
public DefineBuilding(IEnumerable<BuildingDefineTable> bDefineTable)
{
if …Run Code Online (Sandbox Code Playgroud) 我需要从列表中选择特定的两列,并为两个组合框加载这些值.我试图使用LINQ这样做,它传递给我一个错误"无法将类型的对象强制转换为'类型'System.Collections.Generic.List".
这是我的方法,
private void getVehicleNo()
{
List<Exp_VehicleDTO> oData = oVehicleBL.VehiclesSearch(Convert.ToInt32(Session["CompanyID"].ToString()));
oData = ((List<Exp_VehicleDTO>)oData.SelectMany(x => x.VehicleNo)).ToList();
ddVehicleNo.DataSource = oData;
ddVehicleNo.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
这是车辆搜索方法,
public List<Exp_VehicleDTO> VehiclesSearch(int companyId)
{
List<Exp_VehicleDTO> results = new List<Exp_VehicleDTO>();
try
{
using (CloudConnection oCloudConnection = new CloudConnection(DMSSWE.Common.ConnectionString))
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(" SELECT ");
sb.AppendLine("CompanyID,");
sb.AppendLine("VehicleId,");
sb.AppendLine("VehicleType,");
sb.AppendLine("VehicleNo,");
sb.AppendLine("Status,");
sb.AppendLine("CreatedDateTime,");
sb.AppendLine("CreatedBy,");
sb.AppendLine("CreatedMachine ");
sb.AppendLine(" FROM Exp_CompanyVehicle ");
sb.AppendLine(" WHERE 1=1 ");
sb.AppendLine(" AND (CompanyID=?CompanyID)");
oCloudConnection.CommandText = sb.ToString();
oCloudConnection.Parameters.Clear();
oCloudConnection.Parameters.Add(new Parameter { Name = "CompanyID", Value = …Run Code Online (Sandbox Code Playgroud) 我在这里有这个代码:
public double ProgressBar
{
get
{
return ((double)Completed / Progress);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当两个值(已完成和进度)都为 0 时,它总是返回 NaN。
我也试过:
public double ProgressBar
{
get
{
return ((double)Completed / (double)Progress);
}
}
Run Code Online (Sandbox Code Playgroud)
相同的结果 NaN
我究竟做错了什么?