gpt4 book ai didi

c# - 为什么在 C# 中初始化对象之前分配 null

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

我正在学习如何使用 Windows MediaCapture API 捕获视频的教程在 Windows Phone 和代码示例中,一些变量在分配新实例之前被设置为 null。

private void InitCaptureSettings() {
_captureInitSettings = null;
_captureInitSettings = new Windows.Media.Capture.MediaCaptureInitializationSettings();
_captureInitSettings.AudioDeviceId = "";
_captureInitSettings.VideoDeviceId = "";
_captureInitSettings.StreamingCaptureMode = Windows.Media.Capture.StreamingCaptureMode.AudioAndVideo;
_captureInitSettings.PhotoCaptureSource = Windows.Media.Capture.PhotoCaptureSource.VideoPreview;

if (_deviceList.Count > 0) {
_captureInitSettings.VideoDeviceId = _deviceList[0].Id;
}
}

这样做有什么理由吗?

谢谢

最佳答案

这样做的唯一点是如果 MediaCaptureInitializationSettings 构造函数可能抛出异常,并且您想要确保在那种情况下变量仍然没有有一个对“旧”对象的引用。根据我的经验,这很少有用。 (如果像这样的方法抛出异常,我会尽量避免使用它正在初始化的对象...)

我建议使用对象初始值设定项来完成所有这些:

_captureInitSettings = new MediaCaptureInitializationSettings
{
AudioDeviceId = "",
VideoDeviceId = _deviceList.Count > 0 ? _deviceList[0].Id : "",
StreamingCaptureMode = StreamingCaptureMode.AudioAndVideo,
PhotoCaptureSource = PhotoCaptureSource.VideoPreview
};

这有两个好处:

  • 这是更简单的代码,IMO...更少的重复
  • 它仅在整个对象初始化程序完成后才设置变量的值。如果设置一个属性失败,您最终不会得到对半初始化对象的引用。

关于c# - 为什么在 C# 中初始化对象之前分配 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988631/

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