【发布时间】:2017-05-08 05:00:42
【问题描述】:
我明白为什么宏不包含在语言中;他们很容易被虐待。然而,我时不时地偶然发现它们看起来很可取的情况。就在最近,我正在编写一种记录图像文件的方法:
public void LogImage(Bitmap image, string name)
{
image.Save(LogRootDirectory + name + ".bmp");
}
随后,我认为利用 nameof() 功能更好地提供有关我正在记录的图像的信息是很聪明的。在我的代码中的几个地方,我的行与此非常相似:
ImageLogger?.LogImage(processedImage, nameof(processedImage));
令我困扰的是它的重复性,我更喜欢类似这样的预处理器命令:
#define LOGIMAGE(img) ImageLogger?.LogImage(img, nameof(img));
有没有办法模拟上述宏行为以更好地简化我的代码?
注意:This 问题的不同之处在于作者询问 C# 中是否存在每个处理器的定义。我从一开始就明确表示我知道他们不知道的断言。我的问题是关于我可以替代使用的技术。我相信这是在标记的答案中提供给我的。
【问题讨论】:
-
C# 不支持宏,您最接近的是 Visual Studio 的 sn-ps
-
在上述情况下,你能不能只提供一个重载方法 void LogImage(Bitmap image) 然后调用 LogImage(imager, nameof(image)) ?
-
VS Snippets 不像 c/c++ 宏
-
Knight 使用重载是行不通的。 Nameof(image) 将始终等于字符串“image”,而不是原始变量名。
标签: c#