小编gun*_*171的帖子

获取泛型类的属性

我有一个泛型类,一个对象值在哪里obj.GetType().GetGenericTypeDefinition() == typeof(Foo<>).

class Foo<T>
{
    public List<T> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我如何获得的值Itemsobj?记住,obj是一个Object,我不能演员obj,Foo因为我不知道是什么T.

我希望为此使用反射,但每次我这样做GetProperty("Items")都会返回null.但是,如果有人知道一个好的方法,无需反思就可以做到这一点.

假设我的代码如下所示:

//just to demonstrate where this comes from
Foo<int> fooObject = new Foo<int>();
fooObject.Items = someList;
object obj = (object)fooObject;

//now trying to get the Item value back from obj
//assume I have no idea what <T> is
PropertyInfo propInfo = obj.GetType().GetProperty("Items"); //this returns null
object …
Run Code Online (Sandbox Code Playgroud)

c#

34
推荐指数
3
解决办法
7万
查看次数

如何从HttpResponseMessage获取特定的标头值

我正在进行HTTP呼叫.我的响应X-BB-SESSIONHttpResponseMessage对象的标题部分中包含会话代码.如何获取特定标头值?

我正在使用foreach语句迭代所有标头(MSDN链接).但是编译器一直说不能这样做:

foreach statement cannot operate on variables of type
  System.net.http.headers.cachecontrolheadervalue because
  'System.net.http.headers.cachecontrolheadervalue' doesn't contain
  a public definition for 'GetEnumerator'
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试的代码:

//Connection code to BaasBox

HttpResponseMessage response = await client.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead);
if (response.IsSuccessStatusCode)
{
    //get the headers
    HttpResponseHeaders responseHeadersCollection = response.Headers;
    foreach (var value in responseHeadersCollection.CacheControl)  --> HERE
    {
        string sTemp = String.Format("CacheControl {0}={1}", value.Name, value.Value);
    } else
{
    Console.WriteLine("X-BB-SESSION: NOT Found");
}
Run Code Online (Sandbox Code Playgroud)

从我试图获取值(X-BB-SESSION值)的标题内容是这样的:

Access-Control-Allow-Origin: *    
Access-Control-Allow-Headers: X-Requested-With    
X-BB-SESSION: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

c# httpresponse httpclient windows-phone-8 baasbox

34
推荐指数
4
解决办法
5万
查看次数

为什么不能在.Net中的静态方法中使用关键字"this"?

我试图this在静态方法中使用关键字,但编译器不允许我使用它.

为什么不?

.net c#

31
推荐指数
3
解决办法
4万
查看次数

在多列中查找具有相同值的行

我试图找到具有重复值的行,但仅基于选定数量的列,而不是单个列或整个行.例如,如果我的表看起来像这样:

ID     Address    State    Name
-------------------------------
0      7 Brown    NY       John
1      3 Red      WX       Jane
2      7 Brown    WX       Ted
3      7 Brown    NY       Fred
Run Code Online (Sandbox Code Playgroud)

我的问题是:

查找行的地址和状态字段与另一行的地址和状态字段匹配的行的所有ID.

这个查询的答案是:

ID    Address    State    Name
------------------------------
0     7 Brown    NY       John
3     7 Brown    NY       Fred
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

建议: 如何从单个表中选择多个列值相同的行

sql sql-server

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

如何在JOIN扩展方法中实现左连接

我试图在p.Person表的这种查询上实现外连接.我该怎么做?

此示例来自http://ashishware.com/DSLinqExample.shtml

var onlyinfo = p.Person
    .Where(n => n.FirstName.Contains('a'))
    .Join(p.PersonInfo,
        n => n.PersonId,
        m => m.PersonId,
        (n, m) => m)
    .ToArray<Persons.PersonInfoRow>();
Run Code Online (Sandbox Code Playgroud)

c# linq extension-methods

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

关系处于已删除状态

当我试图清除一个集合(调用.Clear)时,我得到以下异常:

保存不公开其关系的外键属性的实体时发生错误.EntityEntries属性将返回null,因为无法将单个实体标识为异常的来源.通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常.有关详细信息,请参阅InnerException.

内在的例外是:

来自'User_Availability'AssociationSet的关系处于'已删除'状态.给定多重约束,相应的'User_Availability_Target'也必须处于'已删除'状态.

用户看起来像这样:

....
ICollection<Availability> Availability { get; set; }
Run Code Online (Sandbox Code Playgroud)

可用性如下所示:

int ID { get; set; }
User User { get; set; }
DateTime Start { get; set;
DateTime End { get; set; }
Run Code Online (Sandbox Code Playgroud)

配置如下:

HasMany(x => x.Availability).WithRequired(x => x.User);
HasRequired(x => x.User).WithMany(x => x.Availability);
Run Code Online (Sandbox Code Playgroud)

导致问题的代码是:

user.Availability.Clear();
Run Code Online (Sandbox Code Playgroud)

我已经看过其他替代方法,比如使用DbSet删除项目,但我觉得我的代码不会那么干净.有没有办法通过清除集合来实现这一目标?

c# entity-framework ef-code-first entity-framework-5

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

如何使用std :: atomic <>

我有一个类,我想在不同的线程中使用,我想我可以使用std::atomic这种方式:

class A
{
    int x;

public:
    A()
    {
        x=0;
    }

    void Add()
    {
        x++;
    }

    void Sub()
    {
        x--;
    }     
};
Run Code Online (Sandbox Code Playgroud)

在我的代码中:

  std::atomic<A> a;
Run Code Online (Sandbox Code Playgroud)

并在另一个线程中:

  a.Add();
Run Code Online (Sandbox Code Playgroud)

  a.Sub();
Run Code Online (Sandbox Code Playgroud)

但我收到一个a.Add()未知的错误.我怎么解决这个问题?

有没有更好的方法来做到这一点?

请注意,这是一个示例,我想要的是确保对A类的访问是线程安全的,所以我不能使用

std::atomic<int> x;
Run Code Online (Sandbox Code Playgroud)

如何使用线程安全的类std::atomic

c++ multithreading atomic c++11

29
推荐指数
3
解决办法
5万
查看次数

在 Docker 中运行 .NET 6 项目会抛出 Globalization.CultureNotFoundException

我已成功将 API 项目从 .NET 5 升级到 .NET 6,并且在本地执行时运行良好(没有 Docker)。

我还将 Dockerfile 中的版本从“5.0-alpine3.13”更新为“ 6.0-alpine3.14 ”,如下所示(仅我所做的更改)。

ARG VERSION=6.0-alpine3.14

#Runtime stage
FROM mcr.microsoft.com/dotnet/aspnet:$VERSION AS base
EXPOSE 8080
ENV DOTNET_RUNNING_IN_CONTAINER=true \
  ASPNETCORE_URLS=http://+:8080

#Build stage
FROM mcr.microsoft.com/dotnet/sdk:$VERSION AS build
WORKDIR /src
COPY ["/src/RM.Api/RM.Api.csproj", "/src/RM.Api/"]
RUN dotnet restore "/src/RM.Api/RM.Api.csproj"
COPY . .
WORKDIR "/src/src/RM.Api"

#Publish dotnet project
FROM build AS publish
ARG BUILDCONFIG=RELEASE
RUN dotnet publish "RM.Api.csproj" -c $BUILDCONFIG -o /app/publish

#Create local user, change ownership, and copy artifacts
FROM base AS final
WORKDIR /app
RUN …
Run Code Online (Sandbox Code Playgroud)

azure-storage docker dockerfile asp.net-core-6.0 .net-6.0

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

为什么我不应该在CSS中使用ID选择器?

我对此行"请勿在CSS中使用ID选择器"感到震惊.这是真的吗?我发现很多帖子都写过这个.

  1. http://mattwilcox.net/archive/entry/id/1054/
  2. http://screwlewse.com/2010/07/dont-use-id-selectors-in-css/
  3. http://oli.jp/2011/ids/

我想我们可以使用ID作为选择器.

我还是想清楚这一点.

css css-selectors

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

扫描仪永远不会关闭

我正在开发一款游戏,我的扫描仪遇到了一些问题.我的资源泄漏扫描程序从未关闭过.

但我以为我的扫描仪在没有关闭它之前就已经工作了.但现在不是.有人可以帮帮我吗?

import java.util.Scanner;

public class Main {

    public static final boolean CHEAT = true;

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        int amountOfPlayers;
        do {
            System.out.print("Select the amount of players (1/2): ");
            while (!scanner.hasNextInt()) {
                System.out.println("That's not a number!");
                scanner.next(); // this is important!
        }

        amountOfPlayers = scanner.nextInt();
        while ((amountOfPlayers <= 0) || (amountOfPlayers > 2));
        System.out.println("You've selected " + amountOfPlayers+" player(s)."); 
    }
}
Run Code Online (Sandbox Code Playgroud)

java resource-leak java.util.scanner

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