小编Arn*_* F.的帖子

C# - 静态类型不能用作类型参数

我有一个泛型类,它可以帮助我对参数值进行检查

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)

我收到此错误(在编译时):

静态类型不能用作类型参数

我做错了什么?

c# generics static

25
推荐指数
2
解决办法
3万
查看次数

如何标记类是线程安全的(或不是)?

在MSDN文档中,我们看到:

安慰

线程安全

这种类型是线程安全的.

的TextWriter

线程安全

此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的.任何实例成员都不保证是线程安全的.

我已经为Console一个开发了一个类似的(静态)类,那么如何将它标记为线程安全呢?我正在提取XML文档,我知道我可以像MSDN Doc那样使用这个部分.

希望我足够清楚......

感谢帮助 !

c# documentation attributes thread-safety

23
推荐指数
2
解决办法
4414
查看次数

获取连接到串行端口的设备名称

我搜索如何获取连接到串行端口的材料的设备名称.

我有两种不同类型的材料可以连接在上面.

第一个:打印机(仅接收数据并且不发送任何内容)第二个:余额(仅发送数据并且不接收任何内容)

我如何区分这两种材料?

谢谢.

c# serial-port

16
推荐指数
2
解决办法
2万
查看次数

如何知道原生方法是安全/不安全的?

我实现了这个函数:GetSystemPowerStatusExGetSystemPowerStatusEx2

根据MSDN上的这篇文章,我应该创建一个根据我将使用的函数命名的类,但我的问题是:我怎么知道我应该把哪个类放入GetSystemPowerStatusEx和GetSystemPowerStatusEx2?

我迷路了...

感谢帮助.

[编辑]我的问题是:这三个类名中哪一个对我来说是好的(NativeMethods/SafeNativeMethods/UnsafeNativeMethods)?

这些方法应该属于以下类之一:

NativeMethods - 此类不会抑制非托管代码权限的堆栈遍历.(System.Security.SuppressUnmanagedCodeSecurityAttribute不能应用于此类.)此类适用于可在任何地方使用的方法,因为将执行堆栈遍历.

SafeNativeMethods - 此类禁止堆栈遍历非托管代码权限.(System.Security.SuppressUnmanagedCodeSecurityAttribute应用于此类.)此类适用于任何人都可以安全调用的方法.这些方法的调用者不需要执行完整的安全性审查,以确保使用是安全的,因为这些方法对任何调用者都是无害的.

UnsafeNativeMethods - 此类禁止堆栈遍历非托管代码权限.(System.Security.SuppressUnmanagedCodeSecurityAttribute应用于此类.)此类适用于潜在危险的方法.这些方法的任何调用者都必须执行完整的安全性检查,以确保使用是安全的,因为不会执行堆栈遍历.

c# interop

13
推荐指数
1
解决办法
3938
查看次数

突出显示RichTextBox中的文本

我正在尝试使用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 …

c# wpf syntax-highlighting richtextbox

13
推荐指数
1
解决办法
1万
查看次数

Wix - 该目录位于用户配置文件中,但未在RemoveFile表中列出

我想在开始菜单中创建一个子文件夹,在我的情况下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)

installer windows-installer wix

12
推荐指数
1
解决办法
5228
查看次数

C# - 类的通用HashCode实现

我正在研究如何为类构建最好的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)

c# hashcode

10
推荐指数
1
解决办法
8969
查看次数

通过特定的网络适配器发送HttpWebRequest

我有两个连接到我的计算机的无线网络适配器,每个都连接到不同的网络.我想构建一种我的浏览器将连接到的代理服务器,它将从不同的适配器发送每个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得到的仍然是相同的..任何帮助?

c# httpwebrequest

10
推荐指数
2
解决办法
6589
查看次数

Xamarin - 从base64字符串显示图像

我是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)

c# wpf xaml xamarin.ios xamarin

10
推荐指数
1
解决办法
1万
查看次数

C# - 关于PowerStatus更改的提升事件

我创建了一个需要处于安全状态的应用程序,所以我想在后台跟踪计算机的电源状态.如果电池电量(如果有)低或严重,我将不允许用户继续使用该应用程序并正确退出.

首先,我很惊讶没有这样的事件来检测变化.您需要始终手动检查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# event-handling

9
推荐指数
2
解决办法
5705
查看次数