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

GLl*_*art 5 c#

我正在关注如何使用Windows Phone上的Windows MediaCapture API以及代码示例使用捕获视频的教程,在分配新实例之前,一些变量设置为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;
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何理由应该这样做?

谢谢

Jon*_*eet 10

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

我建议使用对象初始化器完成所有这些操作:

_captureInitSettings = new MediaCaptureInitializationSettings
{
    AudioDeviceId = "",
    VideoDeviceId = _deviceList.Count > 0 ? _deviceList[0].Id : "",
    StreamingCaptureMode = StreamingCaptureMode.AudioAndVideo,
    PhotoCaptureSource = PhotoCaptureSource.VideoPreview
};
Run Code Online (Sandbox Code Playgroud)

这有两个好处:

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