'这是数组的一个方法了,可是可以给数组定义扩展方法来实现这种形式。不过要给Item每个成员能动态生成相应方法,想不出其它简单点的办法,只能一个一个的添加扩展方法。
五峰网站建设公司创新互联公司,五峰网站设计制作,有大型网站制作公司丰富经验。已为五峰成百上千提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的五峰做网站的公司定做!
Namespace 测试
Public Class Item
Public Number() As String
Public Name As String
Public Symbol As String
Public Value As Single
Public Unit As String
Public Description As String
Public Remarks As String
End Class
Public Class XX
Public tty() As Item
Public Sub New()
tty(0).Name = "Women"
tty(0).Value = 198000
tty(1).Name = "temen"
tty.Name("temen").Value = 99999
End Sub
End Class
Public Module Module1
System.Runtime.CompilerServices.Extension() _
Public Function Name(ByVal she As Item(), ByVal key As String) As Item '定义扩展方法功能 在net.3.5前的版本像似没有。
For Each it In she
If it.Name = key Then
Return it
End If
Next
Return Nothing
End Function
End Module
End Namespace
使用值类型的ToString方法
在连接字符串时 经常使用 + 号直接将数字添加到字符串中 这种方法虽然简单 也可以得到正确结果 但是由于涉及到不同的数据类型 数字需要通过装箱操作转化为引用类型才可以添加到字符串中 但是装箱操作对性能影响较大 因为在进行这类处理时 将在托管堆中分配一个新的对象 原有的值复制到新创建的对象中
使用值类型的ToString方法可以避免装箱操作 从而提高应用程序性能
int num= ;
string str= go +num ToString();
运用StringBuilder类
String类对象是不可改变的 对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象 其方法ToString对性能的提高并非很显著
在处理字符串时 最好使用StringBuilder类 其 NET 命名空间是System Text 该类并非创建新的对象 而是通过Append Remove Insert等方法直接对字符串进行操作 通过ToString方法返回操作结果
其定义及操作语句如下所示
int num;
System Text StringBuilder str = new System Text StringBuilder(); //创建字符串
str Append(num ToString()); //添加数值num
Response Write(str ToString); //显示操作结果
使用 HttpServerUtility Transfer 方法在同一应用程序的页面间重定向
采用 Server Transfer 语法 在页面中使用该方法可避免不必要的客户端重定向(Response Redirect)
避免使用ArrayList
因为任何对象添加到ArrayList都要封箱为System Object类型 从ArrayList取出数据时 要拆箱回实际的类型 建议使用自定义的集合类型代替ArrayList 提供了一个新的类型 叫泛型 这是一个强类型 使用泛型集合就可以避免了封箱和拆箱的发生 提高了性能
使用HashTale代替其他字典集合类型
(如StringDictionary NameValueCollection HybridCollection) 存放少量数据的时候可以使用HashTable
为字符串容器声明常量 不要直接把字符封装在双引号 里面
//避免
MyObject obj = new MyObject();
obj Status = ACTIVE ;
//推荐
const string C_STATUS = ACTIVE ;
MyObject obj = new MyObject();
obj Status = C_STATUS;
不要用ToUpper() ToLower()转换字符串进行比较 用String Compare代替 它可以忽略大小写进行比较
例
const string C_VALUE = PARE ;
if (String Compare(sVariable C_VALUE true) == )
{
Console Write( 相同 );
}
也可以用str == String Empty或者str Length == 判断是否为空 (注意判断输入数据的长度 可防止sql注入式攻击)
将String对象的Length属性与 比较是最快的方法 避免不必要的调用 ToUpper 或 ToLower 方法
类型转化Int TryParse()优于Int Parse()优于Convert ToInt ()
建议 NET 下用Int Parse() NET 用Int TryParse()
因为
Convert ToInt 会把最终的解析工作代理给 Int Parse
Int Parse 会把最终的解析工作代理给Number ParseInt
Int TryParse 会把最终的解析工作代理给Number TryParseInt
如果只是从XML对象读取数据 用只读的XPathDocument代替XMLDocument 可以提高性能
//避免
XmlDocument xmld = new XmlDocument();
xmld LoadXml(sXML);
txtName Text = xmld SelectSingleNode( /packet/child ) InnerText;
//推荐
XPathDocument xmldContext = new XPathDocument(new StringReader(oContext Value));
XPathNavigator xnav = xmldContext CreateNavigator();
XPathNodeIterator xpNodeIter = xnav Select( packet/child );
iCount = xpNodeIter Count;
xpNodeIter = xnav SelectDescendants(XPathNodeType Element false);
while(xpNodeIter MoveNext())
{
sCurrValues += xpNodeIter Current Value+ ;
}
避免在循环体里声明变量 应该在循环体外声明变量 在循环体里初始化
C#程序开发要遵循的一个基本原则就是避免不必要的对象创建
//避免
for(int i= ; i ; i++)
{
SomeClass objSC = new SomeClass();
}
//推荐
SomeClass objSC = null;
for(int i= ; i ; i++)
{
objSC = new SomeClass();
}
捕获指定的异常 不要使用通用的System Exception
//避免
try
{
some logic
}
catch(Exception exc)
{
Error handling
}
//推荐
try
{
some logic
}
catch(System NullReferenceException exc)
{
Error handling
}
catch(System ArgumentOutOfRangeException exc)
{
Error handling
}
catch(System InvalidCastException exc)
{
Error handling
}
使用Try catch finally时 要在finally里释放占用的资源如连接 文件流等
不然在Catch到错误后占用的资源不能释放
try
{}
catch
{}
finally
{
conntion close();
}
不要用Exception控制程序流程
有些程序员可能会使用异常来实现一些流程控制 例如
try{
result= /num;
}
Catch(Exception e)
{
result= ;
}
但实际上 Exception是非常消耗系统性能的 除非必要 不应当使用异常控制来实现程序流程 上面的代码应当写为
if(num!= )
result= /num;
else
result= ;
避免使用递归调用和嵌套循环 使用他们会严重影响性能 在不得不用的时候才使用
禁用和Jscript动态数据类型
应当始终显示地申明变量数据类型 这能够节约程序的执行时间 以往 开发人员喜欢使用 Visual Basic VBScript 和 JScript 的原因之一就是它们所谓 无类型 的性质 变量不需要显式类型声明 并能够简单地通过使用来创建它们 当从一个类型到另一个类型进行分配时 转换将自动执行 不过 这种便利会大大损害应用程序的性能
如
lishixinzhi/Article/program/net/201311/13198
1、vb.net的 数组定义与变量定义差不多。可以用 dim 来定义 比如: dim a(100) as integer。 也可以不定义下标 在程序中 用 redim 来定义。
初始化一个ArrayList对象,调用它的方法和属性,以及增加等操作。
Dim myAL As New ArrayList()
'Add方法用来增加元素。
myAL.Add("Hello")
myAL.Add("World")
myAL.Add("!")
'Count属性表示元素个数。
Console.WriteLine(myAL.Count.ToString())
建议你用下面两个泛型集合类替代ArrayList:
System.Collections.Generic.List
System.Collections.ObjectModel.Collection
你可以限制泛型类型为实现某一个接口的子类,通过添加 class MyClass : where T : IEnumerable可以限制T为实现IEnumerable的类,但是你不能限制T类型是接口类型,你只能限制T类型是一个引用类型,使用where T : class来做。 实例化跟反省没关系...