我们有以下对象
int [,] oGridCells;
Run Code Online (Sandbox Code Playgroud)
它仅用于固定的第一个索引
int iIndex = 5;
for (int iLoop = 0; iLoop < iUpperBound; iLoop++)
{
//Get the value from the 2D array
iValue = oGridCells[iIndex, iLoop];
//Do something with iValue
}
Run Code Online (Sandbox Code Playgroud)
在.NET中是否有办法将固定的第一个索引处的值转换为单个维度数组(除了通过循环值)?
如果数组只循环一次,我怀疑它会加速代码(并且可能会使代码变慢).但是如果数组被大量操作,那么单维数组比多维数组更有效.
我提出问题的主要原因是看它是否可以完成以及如何完成,而不是将其用于生产代码.
我们的大多数开发都是在vb.net中完成的(不是我的选择),一个经常使用的代码模式使用'On Error GoTo'后跟'Resume Next',以便所有数据库字段都可以使用DirectCast()读取DBNull值只是被忽略.
目前的代码是
On Error GoTo error_code
oObject.Name = DirectCast(oReader.Item("Name"), String)
oObject.Value = DirectCast(oReader.Item("Value"), Integer)
error_code:
Resume Next
Run Code Online (Sandbox Code Playgroud)
C#代码替换这个启用删除On Error代码即可
oObject.Name = oReader["Name"] as string ?? string.Empty;
oObject.Value = oReader["Value"] as int? ?? -1;
Run Code Online (Sandbox Code Playgroud)
问题是这个C#代码的vb.net eqivelent使用TryCast(),它只能用于引用类型(可空类型是值类型),而C#as关键字可以用于引用和可空类型.
总而言之,有没有人有一个vb.net代码的例子,它在每个数据库字段的单行中与C#代码做同样的事情?
-编辑-
在我们的案例中,我已经确定了我认为最好的解决方案.Helper方法不适合(由于管理),我们不能使用扩展方法,因为我们只使用.NET 2.0(尽管使用VS 2008,因此我们获得了If())
oObject.Name = If(oReader.IsDBNull(oReader.GetOrdinal("Name")), String.Empty, oReader.GetString(oReader.GetOrdinal("Name")))
oObject.Value = If(oReader.IsDBNull(oReader.GetOrdinal("Value")), 0, oReader.GetInt32(oReader.GetOrdinal("Value")))
Run Code Online (Sandbox Code Playgroud) 在VB.NET中使用数组的最佳方法是什么,可以是Nothing或初始化并给它一个零长度?
我能想到的三个选择是:
ReDim oBytes(-1)
oBytes = New Byte(-1) {}
oBytes = New Byte() {}
Run Code Online (Sandbox Code Playgroud)
第一个例子是我公司的大多数开发人员(我们以前做VB 6)一直使用的.我个人更喜欢第三个例子,因为它是最容易理解发生的事情.
那么每种方法的积极和消极是什么(我知道选项2和3非常相似)?
编辑
所以有人知道有理由避免ReDim其他因为它是VB日的延续吗?
并非我不会接受这个答案,如果这是所有人都有的!
在.NET窗体上操作控件时,以下哪项是最佳实践?为什么?
//Hide control from user and stop control form being useable
oControl.Enabled = false;
oControl.Visible = false;
Run Code Online (Sandbox Code Playgroud)
要么
//Hide control from user and stop control form being useable
oControl.Visible = false;
Run Code Online (Sandbox Code Playgroud)
我一直在使用第一个案例并且在隐藏它时总是禁用控件,但我被告知这是错误的,我应该只是隐藏它.我似乎依稀记得在某个地方阅读如果你没有明确地让一个控件可以继续与用户交互.
任何启示都会被贬低.
根据msdn Enums不能有基本类型的char.为什么enum没有基本类型的char?另外为什么微软强烈建议枚举包含一个值为0的常量?非常感谢你
我正在使用以下代码初始化XmlDocument
XmlDocument moDocument = new XmlDocument();
moDocument.AppendChild(moDocument.CreateXmlDeclaration("1.0", "UTF-8", null));
moDocument.AppendChild(moDocument.CreateElement("kml", "http://www.opengis.net/kml/2.2"));
Run Code Online (Sandbox Code Playgroud)
在此过程的后面,我使用以下代码向其中写入一些值
using (XmlWriter oWriter = oDocument.DocumentElement.CreateNavigator().AppendChild())
{
oWriter.WriteStartElement("Placemark");
//....
oWriter.WriteEndElement();
oWriter.Flush();
}
Run Code Online (Sandbox Code Playgroud)
保存文档后,最终得到以下xml
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Placemark xmlns="">
<!-- -->
</Placemark>
</kml>
Run Code Online (Sandbox Code Playgroud)
如何摆脱Placemark元素上的空xmlns?
-编辑以显示更改位置标记的方式-
如果我将名称空间放在位置标记的写入中,则不会将任何元素添加到文档中。
使用C#(或VB.NET)当需要计数器时,应该使用哪个循环(for循环或do/while循环)?
如果循环只应迭代设定次数或设定范围,它会有所不同吗?
场景A - for循环
for (int iLoop = 0; iLoop < int.MaxValue; iLoop++)
{
//Maybe do work here
//Test criteria
if (Criteria)
{
//Exit the loop
break;
}
//Maybe do work here
}
Run Code Online (Sandbox Code Playgroud)
好处
缺点
场景B - do/while循环
int iLoop = 0;
do
{
//Increment the counter
iLoop++;
//Do work here
} while (Criteria);
Run Code Online (Sandbox Code Playgroud)
要么
int iLoop = 0;
while (Criteria)
{
//Increment the counter
iLoop++;
//Do work here
}
Run Code Online (Sandbox Code Playgroud)
好处
缺点
我已经编写了这个函数来自动从字符串数组中的不同值中将性别更正为M或F. 它工作正常但我的经理告诉我使用Dictionary,他说效率更高.但我不知道.有谁想帮我理解如何做到这一点?谢谢.
Public Function AutoGender(ByVal dt As DataTable) As DataTable
Dim Gender As String = ""
Dim Mkeywords() As String = {"boy", "boys", "male", "man", "m", "men", "guy"}
Dim Fkeywords() As String = {"girl", "girls", "female", "woman", "f", "women", "chick"}
Dim row As DataRow
For Each row In dt.Rows
If Mkeywords.Contains(row("Gender").ToString.ToLower) Then
Gender = "M"
row("Gender") = Gender
ElseIf Fkeywords.Contains(row("Gender").ToString.ToLower) Then
Gender = "F"
row("Gender") = Gender
End If
Next
Return dt
End Function
Run Code Online (Sandbox Code Playgroud) 我目前正在更新我们的软件安装程序,并且有一些关于安装.NET框架的问题.
安装.NET 2.0 SP2所需的安装程序(.exe或.msi)是什么?
安装.NET 3.5 SP1所需的安装程序(.exe或.msi)是什么?
微软的下载页面有些含糊不清.我相信我需要.Microsoft .NET Framework 2.0 Service Pack 2和Microsoft .NET Framework 3.5 Service Pack 1(完整包).
我们需要适用于Windows 2000的.NET 2.0 SP2; .NET 3.5 SP1适用于Windows XP,Windows Server 2003,Windows Vista x86和x64,Windows Server 2008 x86和x64以及Windows 7 x86和x64.
这些将作为软件先决条件从Advanced Installer运行..NET 3.5必须支持x86和x64操作系统.