我似乎有一种奇怪的习惯......据我的同事说,至少.我们一直在一个小项目上工作.我编写类的方式是(简化示例):
[Serializable()]
public class Foo
{
public Foo()
{ }
private Bar _bar;
public Bar Bar
{
get
{
if (_bar == null)
_bar = new Bar();
return _bar;
}
set { _bar = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
所以,基本上,我只在调用getter并且字段仍然为null时初始化任何字段.我认为这可以通过不初始化任何地方没有使用的任何属性来减少过载.
ETA:我这样做的原因是我的类有几个属性返回另一个类的实例,而这个属性又具有更多类的属性,依此类推.调用顶级类的构造函数随后将调用所有这些类的所有构造函数,而不是总是需要它们.
除个人偏好外,是否有任何反对这种做法的反对意见?
更新:我已经考虑了很多关于这个问题的不同意见,我将坚持我接受的答案.但是,我现在对这个概念有了更好的理解,我能够决定何时使用它,何时不能.
缺点:
优点:
大多数缺点不适用于我当前的库,但是我必须测试"微优化"是否实际上是在优化任何东西.
最后更新:
好的,我改变了答案.我最初的问题是这是否是一个好习惯.我现在确信它不是.也许我仍会在我当前代码的某些部分使用它,但不是无条件的,绝对不是所有的时间.因此,在使用它之前,我会失去习惯并思考它.感谢大家!
我有一个包含.ZIP文件的文件夹.现在,我想使用C#将ZIP文件解压缩到特定文件夹,但不使用任何外部程序集或.Net Framework 4.5.
我搜索过,但没有找到任何使用Framework 4.0或更低版本解压缩*.zip文件的解决方案.
我尝试过GZipStream,但它只支持.gz而不支持.zip文件.
我需要在HTML中的knockout.js的foreach循环中禁用锚标记.
这是我的代码:
<a id="aQStreamSkype" data-bind="attr:{href: ''}, click: $parent.StoreUserClick,disable: ($data.SkypeId == 'null')">Skype </a>
Run Code Online (Sandbox Code Playgroud) 我正在努力实施FilePathCollection
.它的项目是简单的文件名(没有路径 - 例如"image.jpg").一旦通过foreach
循环使用集合,它应该返回通过连接创建的完整路径baseDirectory
.我怎样才能做到这一点?
public class FilePathCollection : List<string>
{
string baseDirectory;
public FilePathCollection(string baseDirectory)
{
this.baseDirectory = baseDirectory;
}
new public System.Collections.IEnumerator GetEnumerator()
{
foreach (string value in this._items) //this does not work because _list is private
yield return baseDirectory + value;
}
}
Run Code Online (Sandbox Code Playgroud) 我列举了连接在PC上的打印机.我是用C#System.Printing
命名空间完成的.它运作良好.但主要是它显示软件打印机,如Microsoft XPS Document writer,Microsoft Fax等.我想知道是否可以从枚举中删除这些ssoftware打印机.我所做的代码如下所示:
PrintQueue printQueue = null;
LocalPrintServer localPrintServer = new LocalPrintServer();
// Retrieving collection of local printer on user machine
PrintQueueCollection localPrinterCollection =
localPrintServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local,
EnumeratedPrintQueueTypes.Connections });
System.Collections.IEnumerator localPrinterEnumerator =
localPrinterCollection.GetEnumerator();
while (localPrinterEnumerator.MoveNext())
{
// Get PrintQueue from first available printer
printQueue = (PrintQueue)localPrinterEnumerator.Current;
if (!printQueue.IsOffline)
{
MessageBox.Show(printQueue.FullName.ToString());
string s = "Printer found " + printQueue.FullName.ToString();
listBox1.Items.Add(s);
}
else
{
// No printer exist, return null PrintTicket
// return null;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用下面的示例代码来编写和下载内存流到C#中的文件.
MemoryStream memoryStream = new MemoryStream();
TextWriter textWriter = new StreamWriter(memoryStream);
textWriter.WriteLine("Something");
byte[] bytesInStream = new byte[memoryStream.Length];
memoryStream.Write(bytesInStream, 0, bytesInStream.Length);
memoryStream.Close();
Response.Clear();
Response.ContentType = "application/force-download";
Response.AddHeader("content-disposition",
"attachment; filename=name_you_file.xls");
Response.BinaryWrite(bytesInStream);
Response.End();
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
指定的参数超出了有效值的范围.
参数名称:offset
可能是什么原因?
我想知道这些Web测试框架(Watin和Selenium)对Silverlight UI测试的效果如何.
有人在项目上试过吗?Watin或Selenium非常适合Silverlight吗?
有什么方法我可以知道Excel是否处于脏状态.
脏状态我的意思是: - 当您在Excel上执行任何操作并关闭保存按钮时 - Excel会要求您保存文件.因此,在编辑文件时必须设置一些标志.
我可以通过C#代码了解Excel文件的状态吗?
搜索了很多,但没有多少帮助.有一个选项可以让您通过查看来了解Excel是否处于编辑状态GetRibbonControlEnabled("FileNewDefault")
在这种情况下,您只能在执行此方法时查看Excel是否处于编辑状态.
如果我想知道Excel是否在打开时被编辑/变脏了怎么办?
请不要建议开始使用上述功能继续查看Excel是否处于编辑模式的后台线程.
非常感谢帮助.
好的,我一直在尝试通过网络摄像头做一些特定的视频.我有一个Lumenera Infinity 2显微镜,我试图从中提取饲料,并希望能够在进入时修改饲料.由于我找不到使用Video Source Player的方法,我决定改为拉动每个帧(相机的最大15fps)作为位图,以便我可以在那里进行修改.
问题是:我有一个巨大的内存泄漏.当我使用videoSourcePlayer运行视频时,它使用大约30兆的徘徊.当我将帧拉动为位图时,它会在几秒钟内打破1 gig的内存.
我错过了什么,这里?我认为自动垃圾收集会在旧框架无法访问时挖出旧框架.我应该尝试强制在位图上进行垃圾回收吗?或者它完全是另一回事,而且我还是错过了它.
FilterInfoCollection captureDevices;
VideoCaptureDevice cam;
Bitmap bitmap;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
captureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
if (captureDevices.Count == 0)
throw new ApplicationException();
CameraSelectComboBox.Items.Clear();
foreach (FilterInfo device in captureDevices)
{
CameraSelectComboBox.Items.Add(device.Name);
}
CameraSelectComboBox.SelectedIndex = 0;
CameraSelectComboBox.Enabled = true;
}
catch (ApplicationException)
{
CameraSelectComboBox.Enabled = false;
}
}
private void connectButton_Click(object sender, EventArgs e)
{
cam = new VideoCaptureDevice(captureDevices[CameraSelectComboBox.SelectedIndex].MonikerString);
cam.NewFrame -= Handle_New_Frame; //Just to avoid …
Run Code Online (Sandbox Code Playgroud) c# ×8
aforge ×1
asp.net ×1
coding-style ×1
collections ×1
excel ×1
generics ×1
getter ×1
html ×1
inheritance ×1
javascript ×1
knockout.js ×1
memory-leaks ×1
memorystream ×1
printers ×1
selenium ×1
silverlight ×1
testing ×1
unzip ×1
watin ×1
webcam ×1
zipfile ×1