小编Wil*_*ill的帖子

如何声明两个类,以便它们可以传递给同一个函数?

鉴于以下两个类

public class LocalFoo {

}

public class RemoteFoo {

}
Run Code Online (Sandbox Code Playgroud)

这两个类应该具有类似的属性:

public string strBar{ get; set; }
public int intBar{ get; set; }
Run Code Online (Sandbox Code Playgroud)

不同之处在于如何设置和读取这些属性 - 在前一种情况下,属性由本地处理 - 由程序完成.在后者中,直接从数据库中读取和写入两个DataTable属性.

我知道继承必须在这里发生,但那就是我陷入困境的地方.

例如,如果我声明一个方法TakesFoo:

public void takesFoo( Foo bar ){
    /*Magic Happens Here*/
}
Run Code Online (Sandbox Code Playgroud)

我想,要能够调用该方法与任何类型的对象LocalFooRemoteFoo.

我知道我可以写一个抽象类Foo:

public abstract class Foo{
}
Run Code Online (Sandbox Code Playgroud)

并且LocalFoo和RemoteFoo都继承了它但是有一个警告 - 我有另一个抽象类,我需要RemoteFoo继承,这使得它更容易读/写DataTables -

public abstract class DRHelper : IEquatable<DRHelper>, IDisposable {
}
Run Code Online (Sandbox Code Playgroud)

我最初的本能是让Foo成为一个界面,但我不知道这是否会起作用,我希望有人可以就如何处理这个问题给我一些指导.

c# inheritance abstract-class

3
推荐指数
1
解决办法
52
查看次数

无法声明界面:资源繁忙

我与USB4Java(低级别的版本)工作,我基本上都是从这个代码工作在这里.我在Ubuntu工作,我遇到了关于权限的问题,但是能够通过终端使用gksu运行eclipse来解决.

现在我遇到了一个新问题:当我在这里找到代码中的要点时:

public static void claimDevice(DeviceHandle handle, int interfaceNum){
    int r = LibUsb.claimInterface(handle, interfaceNum);
    .
    .
    .
Run Code Online (Sandbox Code Playgroud)

我得到一个例外,告诉我"资源很忙":

USB error 6: Unable to claim interface: Resource busy
Run Code Online (Sandbox Code Playgroud)

我之前使用过Ubuntu(但从来没有用过开发,所以我真的很擅长这个).如果这不是应该处理这个问题的地方那么请告诉我在哪里接受它所以我可以得到答案.

具体来说,问题是,这意味着什么,我该如何解决?我的目标,在这种情况下,这是一个自定义USB设备,是创建一个低级别的跨平台...基于java ..."驱动程序"(松散地使用该术语).我现在正在使用Ubuntu,因为终端lsusb命令在相关设备上提供了大量信息.

java eclipse linux usb4java

2
推荐指数
1
解决办法
3572
查看次数

在WPF中为用户控件创建可绑定属性的正确方法是什么?

这是对这个问题的跟进.我已经为控件开发了一个简单的界面,它允许用户能够以最简单的方式定义颜色 - 通过控制颜色本身的ARGB通道.

在此输入图像描述

我希望此控件能够直接绑定到颜色属性,以便允许用户通过滑块调整它.

我碰壁了 - 我试图用它来实现MVVM,但这不起作用,因为这样做我完全无法从控件中提取控件本身定义的颜色属性.

我实际上甚至不觉得这是正确的方法.我需要有几个控件,允许用户更改我们的应用程序的行为和外观,但我无法弄清楚如何让UserControl绑定到应用程序的设置(我已经能够绑定单个,简单的控制,但是当涉及到像这样的复合控件时,我没有在哪里).

这是控件本身和MVVM的代码:

public partial class ColorDefiner : UserControl {

    public static readonly DependencyProperty
        _Color = DependencyProperty.Register( "Color", typeof( Color ), typeof( ColorDefiner ) );

    public Color Color {
        get { return ( Color )this.GetValue( ColorDefiner._Color ); }
        set { this.SetValue( ColorDefiner._Color, value ); }
    }

    public ColorDefiner( ) { InitializeComponent( ); }
}


public class ColorViewModel : INotifyPropertyChanged {

    public event PropertyChangedEventHandler PropertyChanged;

    private Color _Color = Colors.Black;

    public double A …
Run Code Online (Sandbox Code Playgroud)

c# data-binding wpf xaml mvvm

2
推荐指数
1
解决办法
1210
查看次数

C# NPOI Excel 工具不删除行?

我正在开发一个应用程序,该应用程序应该从文件末尾读取一行,对其进行处理,然后删除该行并更新文件。

我正在使用 NPOI 库,但它不起作用。为了避免错误数据(空单元格)进入,我运行以下检查:

IWorkbook WB;
ISheet WS;
ICell cell;
using ( FileStream FS = new FileStream( p, FileMode.Open, FileAccess.Read ) ) {
    if ( Path.GetExtension( p ).ToLower( ).Equals( "xls" ) )
        WB = new HSSFWorkbook( FS );
    else
        WB = new XSSFWorkbook( FS );
}
WS = WB.GetSheetAt( 0 );
cell = WS.GetRow( WS.LastRowNum ).GetCell( 0 );
if ( cell == null ) {
    IRow row = WS.GetRow( WS.LastRowNum );
    WS.RemoveRow( row );
        using ( FileStream FS = new …
Run Code Online (Sandbox Code Playgroud)

c# excel npoi

2
推荐指数
1
解决办法
6398
查看次数

是否可以减少DateTime.Now.Ticks.ToString("X")的长度并仍然保持唯一性?

我有一些与我工作的硬件的限制,其中我只能广播(无线)26个字符.

为了克服这种限制,第一广播发送转换为十六进制(DateTime.Now.Ticks.ToString( "X" ))的时间戳,以及正在发送的消息的长度(也作为十六进制字符串).

接收软件测试标头消息,当它确认收到标题消息时,将时间戳(重新转换为a long)存储在字典中:

/*************************************************************************
 * _pendingMessages.Add( DateTime.Now.Ticks, Tuple.Create( MessageLength, string.Empty ) );
 * T.Item1 = Message Length
 * T.Item2 = Message ( when Message.Length == Length, Pop Message )
 *************************************************************************/
private static Dictionary<long, Tuple<long, string>> _pendingMessages;
Run Code Online (Sandbox Code Playgroud)

不幸的是,每次都必须传递时间戳,它超过了分配字符长度的一半(现在为15个字符).

所以我想的是,我可以通过将十六进制字符串的字符值相加来减少它,而不是传递整个时间戳:

例如 :

DateTime.Now.Ticks.ToSTring("X").Sum( C => C ).ToString("X");
Run Code Online (Sandbox Code Playgroud)

不幸的是,一个快速的测试毫不客气地吹走了这个想法

(重复键很快):

Dictionary<string, long> _dctTest = new Dictionary<string, long>( );
while ( true ){
    long dtNow = DateTime.Now.Ticks;
    string strKey = dtNow.ToString("X").Sum( C => C ).ToStrings("X");
    _dctTest.Add( strKey, dtNow …
Run Code Online (Sandbox Code Playgroud)

c# compression datetime timestamp

2
推荐指数
1
解决办法
2108
查看次数

如何使用Activator.CreateInstance创建一个List <T>,其中T在运行时未知?

我正在使用Activator.CreateInstance类型变量创建对象(在运行时未知):

static dynamic CreateFoo( Type t ) =>
    Activator.CreateInstance( t );
Run Code Online (Sandbox Code Playgroud)

显然,我还没有正确理解如何使用该dynamic类型,因为这仍然只是返回一个对象.

我需要能够将一个集合传递给另一个调用,Activator.CreateInstance在那里创建的类型可能是List<T>:

var values = Enumerable.Range( 1, 50 ).Select(
    I => CreateFoo( typeof( Foo ) ) ).ToArray( );
//This will explode.
var foobar = Activator.CreateInstance(
    typeof( List<Foo> ), values );
Run Code Online (Sandbox Code Playgroud)

调用上面的内容时,它会爆炸,但会出现以下异常:

在此输入图像描述

我明白为什么它这样做 - 当列表使用类型参数定义时,没有列表的构造函数期望可枚举的对象.

问题是我无法转换对象,因为我不知道运行时的类型.Activator.CreateInstance只是似乎返回一个对象,这对List<Foo>我来说很好,因为我将使用依赖对象和属性设置它们,所以盒装对象对他们来说完全没问题,但在尝试创建列表时会破坏一切(可能还有什么否则与构造函数期望类型参数).

我想在这里做什么的正确方法是什么?

符合最小,完整和可验证的示例要求:

using System;
using System.Collections.Generic;
using System.Linq;

namespace MCVEConsole {
    class Program {
        static int Main( string[ ] args …
Run Code Online (Sandbox Code Playgroud)

c# reflection activator

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

Java和HID通信

我正在寻找一个简单的无线HID接口设备的Linux/Windows/Mac Java HID控制器.我对USB4Java LibUsb库进行了修改无济于事,而且我已经朝着JavaHIDAPI的方向发展.

对我来说不幸的是,我真的不知道我正在做什么,除了一个相当不错的高级编程技能集(C#/ VB.Net),并切换到这是杀了我.

我发现的方向说我首先需要编译这里找到的HIDAPI库.它说它会构建一个名为hidapi-jni.dll的东西(它没有).

无论如何,我认为这是我需要去的地方,因为HID什么都不做,只是简单地向无线控制器发送信号和从无线控制器接收信号(并响应接收到的信号).

有没有为此使用JavaHIDAPI的分步教程?还是有更好的图书馆?(我注意到这有点......过时了).

我尝试了以下内容:

static{ System.loadLibrary("hidapi"); }
.
.
.
public static void main(string[] Args) throws . . . {    
    ClassPathLibraryLoader.loadNativeHIDLibrary();
    HIDDevice dev = HIDManager.getInstance().openById(VEND_ID, PROD_ID, null);
    .
    .
    .
}
Run Code Online (Sandbox Code Playgroud)

我正在运行的问题是(除了HIDAPI似乎没有构建到HIDAPI-jni.dll中这一事实)HIDManager.openById(...)总是返回null.另外,我移动了内置在C:...\Java ...\bin目录中的hidapi.dll ......或者其他东西,我确定它是正确的,因为没有任何不满意的链接错误.这真的令人沮丧,因为似乎没有任何关于Java和HID的新手指南.

我在这做错了什么?

java hid hidapi

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

如何将RestSharp响应解析为类?

我正在使用RestSharp处理发送电子邮件,我需要能够检查响应以确保一切正常.

我对JSON一无所知,但是我从搜索中看到的东西让我相信调用会client.Execute<T>( Foo )导致我得到一个类型的对象,T其中包含由请求执行结果填充的属性...

不是这种情况.

在我故意使POST失败的情况下,我从response.Content属性获取此信息:

{"error":3,"message":"Wrong credentials specified"}
Run Code Online (Sandbox Code Playgroud)

当我使用适当的凭据提交请求时,response.Content看起来像这样:

{"message":"OK"}
Run Code Online (Sandbox Code Playgroud)

这让我相信创建一个这样的课程应该是我需要的一切:

public class RestMessage {
    string error { get; set; }
    string message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是当我打电话的时候

IRestResponse<RestMessage> Foo = Bar.Execute<RestMessage>( Baz );
Run Code Online (Sandbox Code Playgroud)

Foo.Data等于一个类型的对象RestMessage,但在任何一种情况下,结果总是那样error = null(在后一种情况下有意义,但在前一种情况下没有意义)和message = null.

显然,它并不像我读过的每个例子那样简单.

我已经在VS2015社区的NuGet中安装了RestSharp,使用了他们非常棒的NuGet ... thingy所以我有最新的版本.

有人可以解释我如何能够完成我想对我做的事情,好像我还在出牙吗?

c# json restsharp deserialization

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

是否可以将整数(short、int、long)转换为 base 64 字符串(反之亦然)?

例如

long.TryParse( someString, NumberStyles.HexNumber, new CultureInfo( "en-US" ), out someLong );
Run Code Online (Sandbox Code Playgroud)

将十六进制字符串 ( 0-9, AF ) 转换为其相应的值。

我想将一个基数为 64 的值( 0-9 ( 10 ), az ( 26 ), AZ ( 26 ) )转换为其相应的整数值。

这是可能的,开箱即用吗?

c# base64

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

为什么声明为 NVARCHAR(MAX) 的变量会删除字符串块?

无论出于何种原因,查询都会被构建为字符串并传递给另一个存储过程来执行。

查询量很大。

超过一千行,我们遇到了一个问题,需要我对其进行调试。

查询被构建到声明的NVARCHAR(MAX)变量中,但是当我使用以下命令打印它时,发生了奇怪的事情 -

WHILE @Printed < @ToPrint BEGIN 
    PRINT(SUBSTRING(
        @sql, @Printed, 4000))
    SET @Printed = @Printed + 4000
    PRINT('Printed: ' + CONVERT(VARCHAR, @Printed))
END
Run Code Online (Sandbox Code Playgroud)

在打印消息的某个地方,它只是......丢失了一大块,我不明白为什么。NVARCHAR(MAX)应该能够举行战争与和平超过 100 次,并且这个查询不是战争与和平。

我知道PRINT(...)有一次只能打印 4000 个字符的限制(因此是循环),但这并不能解释为什么变量只是@sql在某些地方丢失了一块。

如果有帮助的话,具体来说,块丢失的位置是打印前 4,000 个字符后的大约 1,600 个字符。

它为什么要这样做?我是否缺少在查询开始时设置系统变量(例如 NOCOUNT 或 ARITHABORT?我什至不知道它们的作用,或者它们是否参与其中。


编辑:MCVE:这里。要重现,请复制粘贴到 Microsoft SQL Server Management Studio 中并按“F5”。打印的消息将不包含完整的@sql。

sql-server nvarchar max

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