我知道声明的方法void不会返回任何内容.
但似乎在C#void中只是一个关键字,而是一个真实的类型.
void是一个别名System.Void就像int那是System.Int32.
为什么我不允许使用那种类型? 它没有任何意义,但这只是对逻辑的一些想法.
也不
var nothing = new System.Void();
Run Code Online (Sandbox Code Playgroud)
(说我应该使用void(不是别名?))
也不是
var nothing = new void();
Run Code Online (Sandbox Code Playgroud)
编译.
也不可能使用这样的东西:
void GiveMeNothing() { }
void GiveMeNothingAgain()
{
return GiveMeNothing();
}
Run Code Online (Sandbox Code Playgroud)
那么重点是什么System.Void?
我想typedef一个struct其中包含一个指向另一个相同类型的.
多数民众赞成我认为最好的版本:
typedef struct Element
{
char value;
struct Element *next;
} Element;
Run Code Online (Sandbox Code Playgroud)
为什么该变体也在编译+执行?:
typedef struct
{
char value;
struct Element *next;
} Element;
Run Code Online (Sandbox Code Playgroud)
为了描述第一个我会说:" struct Element Element现在名字",第二个:"匿名struct并称之为Element"
但为什么我仍然可以在第二种情况下声明struct Element (在结构内)?
(在GCC和工作MSVC)
我有一个GridView和其中一个GridViewColumn想要生成这样的文本:
textBlock.Text = string.Format("{0} is doing {1} .......", a, b);
Run Code Online (Sandbox Code Playgroud)
但a并b (在视图中的项目的属性),不应该仅仅表现为纯文本,但作为一个Hyperlink为例子.
(另外:格式文本应取决于项目的类型)
如何TextBlock以这种方式生成文本?(用于本地化)
问题更多:我应该自己写一些东西,还是框架提供了一种简单的方法?
在我的C#/ .NET应用程序中,我必须检查给定的可执行文件是否经过数字签名 (最好不Exception进行测试).
然后我需要检查其证书是否有效 (基于已安装的根证书)以及文件内容是否对签名有效.
这里有很多课程BCL,我不知道从哪里开始和使用什么,到目前为止我发现的任何东西并没有消除我的困惑......
如果没有 P/Invoke可能,我想做这样的事情:
bool IsSignedFile(string path);
Cert GetCertificateFromSignedFile(string path);
bool IsValidCertificate(Cert cert)
Sig GetSignatureFromSignedFile(string path);
bool IsValidSignature(string path, Sig sig, Cert cert);
Run Code Online (Sandbox Code Playgroud)
补充说明:
我目前遇到的一个大问题是,我找不到一种方法来轻松获取此类文件的签名.仍然希望有一个提供的,可管理的BCL解决方案,因为如果缺少这一部分,我会感到惊讶.(对于证书,这可以通过公正的方式完成,也可以进行X509Certificate.CreateFromSignedFile验证)
我不希望将50%的工作与P/Invoke代码或大型不同的库混合使用.
我找到了一个AuthenticodeSignatureInformation类,但没有关于为给定的可执行文件使用它的信息.
我想仅将依赖属性附加到特定控件.
如果只是一种类型,我可以这样做:
public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.RegisterAttached("MyProperty", typeof(object), typeof(ThisStaticWrapperClass));
public static object GetMyProperty(MyControl control)
{
if (control == null) { throw new ArgumentNullException("control"); }
return control.GetValue(MyPropertyProperty);
}
public static void SetMyProperty(MyControl control, object value)
{
if (control == null) { throw new ArgumentNullException("control"); }
control.SetValue(MyPropertyProperty, value);
}
Run Code Online (Sandbox Code Playgroud)
(所以:限制ControlGet/Set-Methods中的类型)
但是现在我想允许该属性附加在不同类型的属性上Control.
您尝试使用该新类型为这两个方法添加重载,但由于"未知的构建错误,找到了模糊匹配"而无法编译.
那么如何限制我DependencyProperty选择Controls呢?
(注意:在我的具体情况下,我需要它TextBox和ComboBox)
我有一个类型的对象,X509Certificate2并希望将其显示给用户.我正在用这个X509Certificate2UI.DisplayCertificate方法做这件事.
我遇到的问题是我想要显示的这个证书是由中间CA颁发的,证书不在机器证书存储区中,但其根目录是.
现在,如果我显示所述证书,则对话框无法构建链 (与我相反,因为我能够X509Chain将中间CA作为额外元素)
如何使用整个链显示证书?
X509Certificate2 endCert = ...;
X509Certificate2 intermediateCA = ...;
X509Chain chain = new X509Chain();
chain.ChainPolicy.ExtraStore.Add(intermediateCA);
chain.Build(endCert); // Whole chain!
X509Certificate2UI.DisplayCertificate(endCert); // Dialog shows: "The issuer of this certificate could not be found."
Run Code Online (Sandbox Code Playgroud)
(我无法/允许将中间CA添加到用户/机器商店!)
(我无法/允许创建我自己的对话框.它必须是默认的Windows对话框!)
(P/Invoke是允许,如果需要)
只是作为一个例子,你可以尝试这些证书上面的测试,但你必须要参考System.Security.dll的X509Certificate2UI.DisplayCertificate:
X509Certificate2 endCert = new X509Certificate2(
Convert.FromBase64String(
"MIIE8zCCA9ugAwIBAgIQSBDq+mlsLsCZqWMIWj/YADANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMVGhhd3RlLCBJbmMuMRYwFAYDVQQDEw1UaGF3dGUgU1NMIENBMB4XDTExMTI" +
"yMDAwMDAwMFoXDTE0MDIxNzIzNTk1OVowgYsxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhNYXJ5bGFuZDEUMBIGA1UEBxQLRm9yZXN0IEhpbGwxIzAhBgNVBAoUGkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW" +
"9uMRcwFQYDVQQLFA5JbmZyYXN0cnVjdHVyZTEVMBMGA1UEAxQMKi5hcGFjaGUub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApyhxElzdnWks7MMCEx24FMhHCbFcgKbO+fh/+JYrV91Cs" +
"xsdqsAsvAU37P/eLMQ3ZVm93c6uQbt6cq+0VXniviFjXS3qUUJVUC60Q/YDzaYrTFZdY8ccA5wWdFTiMlJgwIqdlvB7JLkOzotvawRfJxeH+aucY756TdYGapAyno+3pWNXnU5sr1oaJ4uGchaS7LUAqpfP" +
"fA3oTv63ZmIzHh2MTfDeUgdVSxeqEj3FCObLdps4Fs6c08Re2KAEZ+0UcMwNyJh0y6aP6PBgZAdt3qODONrI56TCDxjMC47lmIrm/U2Vy+v1LB90uU/1ESAiKvIKLjVZucO0U4Ol8VgiSDIH1FezXEhl+fP" +
"zY1N18u6kMx0AGDKDO0fBkUpkA6r6K4Kk/YvEJBLiIvLwLLnQhcwJjhRZItA52dNvKHMRYh5er1xVbLj7X+ujDfA6RpJYOmmPUxYzsZpZhTk0wybuGrkuvrm5t9ONP4p/2lan1G9aXqK6OLNh4W9IVUs1o1" +
"KvMP86ToBOsZY/g50cld0kh7AMR+W/Lg9WtPxs1nq98k2J7HZBmMnYTEqwzSFtsMzGlqcFXO170JnfgklUjzi12vwQYO0bf/q+3e7QQsYRXzSGUEdKJZvzs0P09jJ6W/mDdnMdaoh7eYP5eynleZtElUgcd" +
"NNgVAHn8NEUnJpwbGUCAwEAAaOBoDCBnTAMBgNVHRMBAf8EAjAAMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9zdnItb3YtY3JsLnRoYXd0ZS5jb20vVGhhd3RlT1YuY3JsMB0GA1UdJQQWMBQGCCsGAQUF" +
"BwMBBggrBgEFBQcDAjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnRoYXd0ZS5jb20wDQYJKoZIhvcNAQEFBQADggEBAA6BnlWlsAXvTmDpqijPpBUkD9Xkbys7UC/FOuUVr3P" +
"K3d3GCQynwhooBe2CAshtxjb3Cc8zJfeqb5IQfjTcuEznIpONvqFvSmU4/INS+3/TPLoyQ81wpsIUbJzhhJY78CH8TZ5cn2BtWkI9fEydAXYe9a64GVdjPBJhneBon3J63s895GSSucQAIQZEiXBAqoklS5" …Run Code Online (Sandbox Code Playgroud) 我有一个写入的应用程序,C#它需要一些功能VB.NET (更好地说,有效CIL但未提供C#).
所以我有一个可执行文件和一个库文件.
问题:
它必须在一个文件中发布,并且可能不会拆分为不同的程序集!
但是:
这是一个WPF应用程序,ILMerge无法运行.
我能做什么?
是否可以动态生成(高性能)IL?
我认为IEnumerable事物是您可以迭代的对象。
如果它们也是ICollections,你就会知道里面有多少元素。
如果它们是偶数,IList您可以从特定索引中获取包含对象。
一个ReadOnlyCollection<T>实现IList<T>。所以不会ReadOnlyList<T>是一个更好的名字。
ReadOnlyCollection<T>框架中有真实的吗?
(所以我不需要 IList 来创建这样的只读包装器)
标题说全部
为什么要String实施IEnumerable<char>而不是IList<char>?
字符串具有长度,您可以从特定索引中获取元素.
并且可以表明它是不可改变的ICollection<char>.IsReadOnly.
那么它可能有什么问题呢?我错过了什么吗?
正如许多答案所指出的那样:
没有单独的只读列表/集合的界面,但是作为ReadOnlyCollection<T>节目,我认为它绝对可能并且使用它IsReadOnly为这种情况设计的属性.
public class String : IList<char>
{
int IList<char>.IndexOf(char item)
{
// ...
}
void IList<char>.Insert(int index, char item)
{
throw new NotSupportedException();
}
void IList<char>.RemoveAt(int index)
{
throw new NotSupportedException();
}
char IList<char>.this[int index]
{
set
{
throw new NotSupportedException();
}
}
void ICollection<char>.Add(char item)
{
throw new NotSupportedException();
}
void ICollection<char>.Clear()
{
throw new NotSupportedException();
}
public bool Contains(char item) …Run Code Online (Sandbox Code Playgroud) 我想将给定的System.Windows.Forms.Keys一组和一组翻译成System.Windows.Forms.InputLanguage相应的System.Char.
试过一些实验MapVirtualKeyEx,但现在有办法考虑键盘状态,并且ToUnicodeEx是死键的痛苦.
我的目标是一个功能......
static char? FromKeys(Keys keys, InputLanguage inputLanguage)
{
// As I think what can be helpful and I got trying to find a solution for this problem:
Keys vkCode = keys & Keys.KeyCode;
Keys modifiers = keys & Keys.Modifiers;
byte[] keyboardState = new byte[256];
keyboardState[vkCode] = 1 << 7;
if (modifiers.HasFlag(Keys.Shift))
{
keyboardState[(int)Keys.ShiftKey] = 1 << 7;
}
if (modifiers.HasFlag(Keys.Control))
{
keyboardState[(int)Keys.ControlKey] = 1 << 7; …Run Code Online (Sandbox Code Playgroud) .net ×8
c# ×6
wpf ×2
authenticode ×1
binding ×1
c ×1
certificate ×1
code-signing ×1
collections ×1
cryptography ×1
keycode ×1
readonly ×1
string ×1
struct ×1
typedef ×1
vb.net ×1
void ×1
winforms ×1