小编Axi*_*xus的帖子

C#泛型中的通配符等价物

假设我有一个泛型类,如下所示:

public class GeneralPropertyMap<T>
{
}
Run Code Online (Sandbox Code Playgroud)

在其他一些类中,我有一个接收数组的方法GeneralPropertyMap<T>.在Java中,为了获取包含任何类型GeneralPropertyMap的方法的数组,将如下所示:

private void TakeGeneralPropertyMap(GeneralPropertyMap<?>[] maps)
{
}
Run Code Online (Sandbox Code Playgroud)

我们使用通配符,以便稍后我们可以调用每个类型的任意类型的TakeGeneralPropertyMap传递,如下所示:GeneralPropertyMapT

GeneralPropertyMap<?>[] maps = new GeneralPropertyMap<?>[3];
maps[0] = new GeneralPropertyMap<String>();
maps[1] = new GeneralPropertyMap<Integer>();
maps[2] = new GeneralPropertyMap<Double>();
//And finally pass the array in.
TakeGeneralPropertyMap(maps);
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚C#中的等价物并没有成功.有任何想法吗?

.net c# arrays generics wildcard

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

了解代表逆向有用性

所以我有一个委托定义为:

public delegate void MyDelegate<T>(T myParameter);
Run Code Online (Sandbox Code Playgroud)

Resharper建议我应该T如下逆变:

public delegate void MyDelegate<in T>(T myParameter);
Run Code Online (Sandbox Code Playgroud)

现在,我很难理解这有什么用处?我知道它阻止我制作T一个返回类型,但T除此之外,通过制作逆变会得到什么有用的约束?也就是说,当需要将委托与实例一起使用时,我可以创建哪些实例

public delegate void MyDelegate<T>(T myParameter);
Run Code Online (Sandbox Code Playgroud)

我无法创造

public delegate void MyDelegate<in T>(T myParameter);
Run Code Online (Sandbox Code Playgroud)

c# generics delegates variance

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

什么线程在`await`关键字后运行代码?

让我发一个简单的例子:

    private void MyMethod()
    {
        Task task = MyAsyncMethod();
        task.Wait();
    }

    private async Task MyAsyncMethod()
    {
        //Code before await
        await MyOtherAsyncMethod();
        //Code after await
    }
Run Code Online (Sandbox Code Playgroud)

假设我在一个单线程应用程序中运行上面的代码 - 就像一个控制台应用程序 - .我很难理解代码//Code after await是如何运行的.

我明白当我awaitMyAsyncMethod()控制中点击关键字时会回到原点MyMethod(),但后来我将锁定该线程task.Wait().如果线程被锁定,//Code after await如果应该接受它的线程被锁定,怎么能运行?

是否创建了一个新线程来运行//Code after await?或者主线程神奇地走出task.Wait()去运行//Code after await

我不确定这是怎么回事?

c# multithreading asynchronous async-await

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

没有活动连接时,SqlConnection.OpenAsync()会挂起

当我运行这个:

using(SqlConnection connection = new SqlConnection(connectionString)){
    await connection.OpenAsync();
}
Run Code Online (Sandbox Code Playgroud)

它挂connection.OpenAsync()在线上.

如果我在Sql Server Management Studio中查看数据库有多少个活动连接,那么只有一个:可能是此代码使用的连接.所以,我不确定我是否正在从应用程序池中耗尽连接.

我究竟做错了什么?

sql-server ado.net

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

Java相当于C#的"内部"

在Java中,通过将访问修饰符保留为默认值(空白),只有同一包中的成员才能访问这些字段.但是,这并不妨碍其他人在同一个包中声明他们的类,然后从那里访问"默认"字段.

在Java中是否有一种方法可以使字段C#等效于internal.也就是说,当我构建我的库(JAR文件)时,别人无法从JAR外部访问这些字段?即使在与我的类相同的包中声明它们的类.

这是我在图书馆的声明:

package com.my.package;
class MyRestrictedClass{
}
Run Code Online (Sandbox Code Playgroud)



我试图阻止的是我的库的用户从他们的项目做我的jar添加到他们的构建路径,如:

package com.my.package; //Add their class to my package
public class DeveloperClass{
    public void main(){
        MyRestrictedClass foo = new MyRestrictedClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# java access-modifiers internal

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

ASP.NET Core 的 asp-append-version 属性不适用于 wwwroot 目录之外的静态文件

我有一个 ASP.NET Core 项目,wwwroot目录和bower_components目录中都有静态文件。

我可以通过将其添加到我的Startup.cs班级来为这些文件提供服务:

StaticFileOptions rootFileOptions = new StaticFileOptions();
rootFileOptions.OnPrepareResponse = staticFilesResponseHandler;
StaticFileOptions bowerFileOptions = new StaticFileOptions();
bowerFileOptions.OnPrepareResponse = staticFilesResponseHandler;
string bowerDirectory = Path.Combine(Directory.GetCurrentDirectory(), "bower_components");
PhysicalFileProvider bowerPhysicalFileProvider = new PhysicalFileProvider(bowerDirectory);
bowerFileOptions.FileProvider = bowerPhysicalFileProvider;
bowerFileOptions.RequestPath = new PathString("/bower");
app.UseStaticFiles(rootFileOptions);
app.UseStaticFiles(bowerFileOptions);
Run Code Online (Sandbox Code Playgroud)

然后从我的观点中引用它们如下:

<script type="text/javascript" src="/bower/jquery/dist/jquery.min.js" asp-append-version="true"></script>
<script type="text/javascript" src="/Libs/jQuery-UI/jquery-ui.min.js" asp-append-version="true"></script>
Run Code Online (Sandbox Code Playgroud)

虽然asp-append-version看起来就好工作了位于下资源wwwroot,似乎对资源的外部完全忽略wwwroot。尽管如此,所有资源都得到了适当的服务;没有 404 或任何东西。上述代码的结果 HTML 如下:

<script type="text/javascript" src="/bower/jquery/dist/jquery.min.js"></script>
<script type="text/javascript" src="/Libs/jQuery-UI/jquery-ui.min.js?v=YZKMNaPD9FY0wb12QiluqhIOWFhZXnjgiRJoxErwvwI"></script>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

c# asp.net asp.net-core wwwroot asp-append-version

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

如何从BroadcastReceiver发送短信并检查其状态?

所以这是我的 BroadcastReceiver

public class IncomingSMSListener extends BroadcastReceiver {
private static final String SMS_EXTRA_NAME = "pdus";

@Override
public void onReceive(Context context, Intent intent) {
    SmsMessage[] messages = fetchSMSMessagesFromIntent(intent);
}

private SmsMessage[] fetchSMSMessagesFromIntent(Intent intent) {
    ArrayList<SmsMessage> receivedMessages = new ArrayList<SmsMessage>();
    Object[] messages = (Object[]) intent.getExtras().get(SMS_EXTRA_NAME);
    for (Object message : messages) {
        SmsMessage finalMessage = SmsMessage
                .createFromPdu((byte[]) message);
        receivedMessages.add(finalMessage);
    }
    return receivedMessages.toArray(new SmsMessage[0]);
}
Run Code Online (Sandbox Code Playgroud)

}

我能够很好地阅读传入的消息,但是从这里开始我想将消息转发到另一个电话号码并确保它已被发送.我知道我可以做SmsManager.sendTextMessage()但是如何设置PendingIntent要通知短信是否被发送通知的部分?

sms android broadcastreceiver android-pendingintent

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

Go SMS Pro覆盖android.provider.Telephony.SMS_RECEIVED

我有一个应用程序,允许用户在收到短信时转发.早在一天,我有android:priorityintent-filterandroid.provider.Telephony.SMS_RECEIVED 上述Android的默认短信应用一套勉强.我这样做了,因此用户可以转发消息,而无需在消息传递应用程序中清除它们.然而,几个月后,Go SMS Pro发布了他们的应用程序更新,其android:priority价值极高,因此安装该应用程序的用户开始出现问题.我更新了我的应用程序,以便我的优先级略高于Go SMS Pro,一切都很顺利.现在Go SMS Pro再次执行此操作,它们android:priority已被占用到您可以分配的最大值.2147483647在他们的一个广播接收器上,2147483640在另一个上(是的,Go SMS Pro现在有两个广播接收器).

为了解决这个问题,我尝试将我的优先级改为max,就像他们一样,但不知何故,他们的应用程序仍在赢得短信战斗,即使我们的优先级相同.我在Android的某个地方读到必须在具有相同优先级的两个应用程序之间做出决定时,它会选择最早安装的应用程序.我尝试在我的应用程序之后安装Go SMS Pro,但仍然没有.

解决这个问题的正确方法是什么?他们在他们的应用程序中做了什么,使他们在其他人之前获得SMS广播,即使具有相同的android:priority值?

sms android broadcastreceiver

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

unicode字符上的SQL Server唯一约束问题

我的表定义如下:

create table [Language](
Id int primary key identity,
Code varchar(11) not null unique,
NativeName nvarchar(50) not null unique
)
Run Code Online (Sandbox Code Playgroud)

然后,我有一长串插入该表的语句.问题是某些插入语句与我的NativeName列的唯一约束冲突.奇怪的是,内容并不是唯一的.例如,如果我只插入以下表空:

insert into Language (Code, NativeName) values('am', N'????');
insert into Language (Code, NativeName) values('dv', N'???????????');
Run Code Online (Sandbox Code Playgroud)

我得到第二次插入.

Violation of UNIQUE KEY constraint 'UQ__Language__EB1957A5F98D1F9C'. Cannot insert duplicate key in object 'dbo.Language'. The duplicate key value is (???????????).
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么unicode字符会导致这些问题?

sql sql-server unicode unique-constraint

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

如何不在行上而是在行组上使用 OFFSET/FETCH?

如果我有一个如下的一对多表:

FamilyId          UserId
1                 1
1                 2
2                 3
2                 4
3                 5
Run Code Online (Sandbox Code Playgroud)

我可以offset/fetch用来获取一组行。但是我怎样才能用它来获得一组家庭呢?我怎样才能fetch例如,前两个家庭使用(在这种情况下,共4行返回)offset/fetch

sql-server grouping fetch offset

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