最近我问了一个关于如何清理我认为丑陋代码的问题.一个建议是创建一个扩展方法,它将执行所需的功能并返回我想要的功能.我的第一个想法是'太棒了!Extensions有多酷......"但经过一番思考后,我开始对使用Extensions有了第二个想法......
我主要担心的是,Extensions似乎是一种自定义的"快捷方式",可以让其他开发人员难以遵循.我理解使用扩展可以帮助使代码语法更容易阅读,但是如何跟随幕后的声音呢?
以我之前的问题代码片段为例:
if (entry.Properties["something"].Value != null)
attribs.something = entry.Properties["something"].Value.ToString();
Run Code Online (Sandbox Code Playgroud)
现在用扩展名替换它:
public static class ObjectExtensions
{
public static string NullSafeToString(this object obj)
{
return obj != null ? obj.ToString() : String.Empty;
}
}
Run Code Online (Sandbox Code Playgroud)
并使用语法调用:
attribs.something = entry.Properties["something"].Value.NullSafeToString();
Run Code Online (Sandbox Code Playgroud)
定义一个方便的方法,但它真的值得另一个类对象的开销吗?如果有人想重用我的代码片段而不理解扩展,会发生什么?我可以像使用相同的结果一样轻松地使用语法:
attribs.something = (entry.Properties["something"].Value ?? string.Empty).ToString()
Run Code Online (Sandbox Code Playgroud)
所以我做了一些挖掘,发现了一些关于使用Extensions的优点/缺点的文章.对于那些倾向于看看以下链接的人:
我无法确定哪种方式更好.自定义扩展执行我想要他们做的事情或更多显示的代码来完成相同的任务?我真的很想学习"真正的"开发人员对这个主题的看法......
我注意到有些人声明了一个私有变量,然后是一个带有get和set语句的公共变量:
private string myvariable = string.Empty;
public string MyVariable
{
get { return myvariable; }
set { myvariable = value ?? string.Empty; }
}
Run Code Online (Sandbox Code Playgroud)
然后有些人只做以下事情:
public string MyVariable
{
get { return value; }
set { MyVariable = value; }
}
Run Code Online (Sandbox Code Playgroud)
作为一个没有智慧的熊(是的,我有孩子......你为什么问?)我无法弄清楚为什么你会选择一个而不是另一个.使用公共变量是否同样有效,您可以使用变量的set方法随时设置?
任何人都可以为我阐明这一点吗?
更新:在几个人指出它不能编译后,我纠正了第二个例子.对此感到抱歉,但问题仍然存在......
为什么使用标志 -Port 587 通过 Send-MailMessage 命令从 PowerShell 发送电子邮件会产生错误。
命令:
Send-Mailmessage -smtpServer mail.server.com -Port 587 -from "admin@domain.com" -to "user@domain.com" -subject "Test" -body "Test"
Run Code Online (Sandbox Code Playgroud)
错误信息:
Send-Mailmessage :SMTP 服务器需要安全连接或客户端未经过身份验证。服务器响应为:5.7.0 必须首先发出 STARTTLS 命令
PowerShell 文档表示添加 -UseSSL 应指定发送 STARTTLS 命令,但即使添加此标志也可能无法解决您的问题。
命令:
Send-Mailmessage -smtpServer mail.server.com -Port 587 -UseSsl -from "admin@domain.com" -to "user@domain.com" -subject "Test" -body "Test"
Run Code Online (Sandbox Code Playgroud)
错误消息:
Send-Mailmessage:无法从传输连接读取数据:现有连接被远程主机强制关闭。
VbScript是否具有Regex的本机实现?我需要在旧的ASP应用程序上验证电子邮件地址.
任何指针都会很棒.
c# ×2
asp-classic ×1
asp.net ×1
email ×1
powershell ×1
regex ×1
smtp ×1
ssl ×1
tls1.2 ×1
vbscript ×1