我有一个泛型类,它可以帮助我对参数值进行检查
internal sealed class Argument<T>
where T : class
{
private void TraceAndThrow(Exception ex)
{
new InternalTraceHelper<T>().WriteError(ex);
throw ex;
}
internal void ThrowNull(object value, string argName)
{
if (ReferenceEquals(value, null))
{
TraceAndThrow(new ArgumentNullException(argName));
}
}
internal void ThrowIf(bool condition, string argName)
{
if (condition)
{
TraceAndThrow(new ArgumentException(null, argName));
}
}
internal void ThrowNotInEnum(Type enumType, object value)
{
if (!Enum.IsDefined(enumType, value))
{
TraceAndThrow(new ArgumentOutOfRangeException(Resources.ArgEnumIllegalVal.InvariantFormat(value)));
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将它与静态类一起使用时:
internal static class Class1
{
private static Argument<Class1> _arg;
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误(在编译时):
静态类型不能用作类型参数
我做错了什么?
在MSDN文档中,我们看到:
线程安全
这种类型是线程安全的.
线程安全
此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的.任何实例成员都不保证是线程安全的.
我已经为Console一个开发了一个类似的(静态)类,那么如何将它标记为线程安全呢?我正在提取XML文档,我知道我可以像MSDN Doc那样使用这个部分.
希望我足够清楚......
感谢帮助 !
我搜索如何获取连接到串行端口的材料的设备名称.
我有两种不同类型的材料可以连接在上面.
第一个:打印机(仅接收数据并且不发送任何内容)第二个:余额(仅发送数据并且不接收任何内容)
我如何区分这两种材料?
谢谢.
我实现了这个函数:GetSystemPowerStatusEx和GetSystemPowerStatusEx2
根据MSDN上的这篇文章,我应该创建一个根据我将使用的函数命名的类,但我的问题是:我怎么知道我应该把哪个类放入GetSystemPowerStatusEx和GetSystemPowerStatusEx2?
我迷路了...
感谢帮助.
[编辑]我的问题是:这三个类名中哪一个对我来说是好的(NativeMethods/SafeNativeMethods/UnsafeNativeMethods)?
这些方法应该属于以下类之一:
NativeMethods - 此类不会抑制非托管代码权限的堆栈遍历.(System.Security.SuppressUnmanagedCodeSecurityAttribute不能应用于此类.)此类适用于可在任何地方使用的方法,因为将执行堆栈遍历.
SafeNativeMethods - 此类禁止堆栈遍历非托管代码权限.(System.Security.SuppressUnmanagedCodeSecurityAttribute应用于此类.)此类适用于任何人都可以安全调用的方法.这些方法的调用者不需要执行完整的安全性审查,以确保使用是安全的,因为这些方法对任何调用者都是无害的.
UnsafeNativeMethods - 此类禁止堆栈遍历非托管代码权限.(System.Security.SuppressUnmanagedCodeSecurityAttribute应用于此类.)此类适用于潜在危险的方法.这些方法的任何调用者都必须执行完整的安全性检查,以确保使用是安全的,因为不会执行堆栈遍历.
我正在尝试使用RichTextBox和我的第一感觉:"使用它有多复杂!"......太棒了......
所以我试图突出显示我的RichTextBox中包含的文本.
我目前有以下代码:
TextRange range = new TextRange(MyTextInput.Document.ContentStart, MyTextInput.Document.ContentEnd);
range.Text = @"TOP a multiline text or file END";
Regex reg = new Regex("(top|file|end)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
foreach (Match match in reg.Matches(range.Text))
{
TextPointer start = range.Start.GetPositionAtOffset(match.Index, LogicalDirection.Forward);
TextPointer end = range.Start.GetPositionAtOffset(match.Index + match.Length, LogicalDirection.Backward);
// text contains the exact match I want
string text = range.Text.Substring(match.Index, match.Length);
// here the highlighted text isn't the text I searched...
TextRange textrange = new TextRange(start, end);
textrange.ApplyPropertyValue(TextElement.ForegroundProperty, new SolidColorBrush(Colors.Blue));
textrange.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);
}
Run Code Online (Sandbox Code Playgroud)
TOP …
我想在开始菜单中创建一个子文件夹,在我的情况下PMFCompanyFolder已经存在并包含链接,我不想在卸载我的产品时删除.
所以我不推动RemoveFolder财产,我得到:
ICE64: The directory PMFCompanyFolder is in the user profile but is not listed in the RemoveFile table.
Run Code Online (Sandbox Code Playgroud)
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramMenuFolder">
<Directory Id="PMFCompanyFolder" Name="MyCompany">
<Directory Id="PMFProductFolder" Name="MyProduct"/>
</Directory>
</Directory>
</Directory>
<DirectoryRef Id="PMFProductFolder">
<Component Id="PMFProductFolderComponent" Guid="A13A7784-4C82-4CBE-9018-CEC6F266743B">
<RemoveFolder Id="null" On="uninstall"/>
<RegistryValue Root="HKCU" Key="Software\Microsoft\MyCompany\MyProduct" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
<Feature Id="ProductFeature" Title="" Level="1">
<ComponentRef Id="PMFProductFolderComponent"/>
</Feature>
Run Code Online (Sandbox Code Playgroud) 我正在研究如何为类构建最好的HashCode,我看到了一些算法.我看到了这一个:Hash Code实现,似乎是.NET类HashCode方法类似(通过反映代码看).
所以问题是,为什么不创建上面的静态类以便自动构建HashCode,只需传递我们认为是"键"的字段.
// Old version, see edit
public static class HashCodeBuilder
{
public static int Hash(params object[] keys)
{
if (object.ReferenceEquals(keys, null))
{
return 0;
}
int num = 42;
checked
{
for (int i = 0, length = keys.Length; i < length; i++)
{
num += 37;
if (object.ReferenceEquals(keys[i], null))
{ }
else if (keys[i].GetType().IsArray)
{
foreach (var item in (IEnumerable)keys[i])
{
num += Hash(item);
}
}
else
{
num += keys[i].GetHashCode();
}
}
}
return …Run Code Online (Sandbox Code Playgroud) 我有两个连接到我的计算机的无线网络适配器,每个都连接到不同的网络.我想构建一种我的浏览器将连接到的代理服务器,它将从不同的适配器发送每个HTTP请求,因此网页上的加载时间会更短.你们知道我如何决定从哪个网络适配器发送HttpWebRequest?
谢谢 :)
UPDATE
我用过这段代码:
public static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
{
List<IPEndPoint> ipep = new List<IPEndPoint>();
foreach (var i in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
{
foreach (var ua in i.GetIPProperties().UnicastAddresses)
ipep.Add(new IPEndPoint(ua.Address, 0));
}
return new IPEndPoint(ipep[1].Address, ipep[1].Port);
}
private void button1_Click(object sender, EventArgs e)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://whatismyip.com");
request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string x = sr.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)
但即使改变IPEndPoint我发送的IP我从WhatIsMyIp得到的仍然是相同的..任何帮助?
我是Xamarin和XAML的新手,这是我迄今为止在Android和iPhone使用的便携式项目中所做的事情(仅使用Android):
Item.cs(从JSON加载)
[JsonProperty("image")]
private string ImageBase64 { get; set; }
[JsonIgnore]
private Xamarin.Forms.Image _image = null;
[JsonIgnore]
public Xamarin.Forms.Image Image
{
get
{
if (_image == null)
{
_image = new Xamarin.Forms.Image()
{
Source = Xamarin.Forms.ImageSource.FromStream(() => new MemoryStream(Convert.FromBase64String(ImageBase64))),
BackgroundColor = Color.White,
WidthRequest = 64,
HeightRequest = 64,
};
OnPropertyChanged("Image");
}
return _image;
}
private set
{ _image = value; }
}
Run Code Online (Sandbox Code Playgroud)
ItemsView.xaml:
<StackLayout VerticalOptions="FillAndExpand" Padding="5,20,5,0" >
<Label Text="Items" VerticalOptions="Center" Font="35" HorizontalOptions="Center" />
<ListView x:Name="list" ItemsSource="{Binding Items}">
<ListView.ItemTemplate>
<DataTemplate>
<ImageCell …Run Code Online (Sandbox Code Playgroud) 我创建了一个需要处于安全状态的应用程序,所以我想在后台跟踪计算机的电源状态.如果电池电量(如果有)低或严重,我将不允许用户继续使用该应用程序并正确退出.
首先,我很惊讶没有这样的事件来检测变化.您需要始终手动检查PowerStatus.
所以,我已经围绕它创建了一个包装器,如下所示:
using System;
using System.Windows.Forms;
namespace MyApp
{
internal static class BatteryManagement
{
//
internal static event EventHandler<EventArgs> Changed;
//
private static bool _started;
private static System.Threading.Timer _timer;
private static PowerStatus _previousPowerStatus;
internal static void Start()
{
if (!_started)
{
_started = true;
ManageBatteryLevel();
}
}
internal static void Stop()
{
if (_started)
{
if(_timer != null)
{
_timer.Dispose();
_timer = null;
}
_started = false;
}
}
private static void ManageBatteryLevel()
{
_previousPowerStatus = new PowerStatus();
TimeSpan …Run Code Online (Sandbox Code Playgroud) c# ×9
wpf ×2
attributes ×1
generics ×1
hashcode ×1
installer ×1
interop ×1
richtextbox ×1
serial-port ×1
static ×1
wix ×1
xamarin ×1
xamarin.ios ×1
xaml ×1