在 PowerShell 中,可以定义 C# 代码并执行它。将 $null 传递到以下最简单的函数中表明 not null 被传递到函数中
Add-Type -TypeDefinition @"
public static class foo
{
public static void fooo(string a)
{
if(a!=null)
{
System.Console.WriteLine("Not Null. Is '" + a + "'");
}
}
}
"@ -Language CSharp
Run Code Online (Sandbox Code Playgroud)
按如下方式调用它会导致输出 Not Null。是 ''。这表明 $null 在 C# 中不为空。'IsNullOrEmpty' 或 'IsNullOrWhiteSpace' 之类的方法返回 true,因此 PowerShell 必须隐式地将 $null 转换为字符串。
[foo]::fooo($Null)
Run Code Online (Sandbox Code Playgroud)
除了在 C# 中调用 String.IsNullOrEnpty 之外,是否有更好的解决方法?注意:这与指定的“Add_Type”的 C# 语言无关。我正在使用 PowerShell V5。
我可以为用户创建一个 SQL 登录帐户,如下所示:
CREATE LOGIN [myusername] WITH PASSWORD = N'mypassword', CHECK_POLICY= OFF;
Run Code Online (Sandbox Code Playgroud)
我可以检查例如“myusername”是否存在:
SELECT * FROM sys.server_principals WHERE name = N'myusername'
Run Code Online (Sandbox Code Playgroud)
但是如何检查用户提供的“myusername”和密码“wrong_password”是否正确?
我的 C# 解决方案是在 Roger 的帮助下,如下所示:
private static bool SqlLoginExists(string username)
{
SqlConnection connection = new SqlConnection();
connection.ConnectionString = "Data Source=.;" + "Integrated Security=SSPI;";
connection.Open();
string sql_command = "SELECT count(*) FROM sys.server_principals WHERE name = N'" + username + "'";
using (SqlCommand command = new SqlCommand(sql_command, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
if (reader.GetValue(0).ToString() …Run Code Online (Sandbox Code Playgroud) 我有一个根据输入参数计算结构的函数。通过传递所需的变量作为参数,是否可以编写一个仅返回所计算结构的某个变量的函数?问题在于必须在函数内部创建并计算结构,所以我只知道结构成员的将来变量名。
本质上,我想要用一个变量替换以下硬编码的“-> member1”部分,该变量作为主“ DoSomethingSpecific”函数的参数。
double DoSomethingSpecific()
{
struct *s = CalculateStruct();
DoSomethingElse(s->member1);
}
Run Code Online (Sandbox Code Playgroud)
编辑:我基于一个答案创建了一个最小的示例,该示例现在可以正常工作,解决了将结构成员作为变量传递给函数而不创建结构本身的实质性问题。但是,在这种情况下,必须先知道数据类型(int)(否则,如果需要,模板会有所帮助)
#include <iostream>
using namespace std;
struct MyStruct
{
int a;
int b;
};
int GetVariable(int MyStruct::* field)
{
MyStruct *_myStruct = new MyStruct();
_myStruct ->a = 1;
_myStruct ->b = 2;
return _myStruct->*field;
}
int main( )
{
int my_variable = GetVariable(&MyStruct::a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)