小编She*_*dan的帖子

如何在同一个集合中存储不同类型的通用类(都具有通用基类)?

我在这篇文章中遇到了类似的问题.

我还在网上看到成千上万的帖子,说你可以把任何扩展特定基类的泛型类放到基类类型的集合中.我完全理解这一点.

我的问题不同于上面的链接帖和其他基本方式 - 我的泛型类有一个通用的基类.更糟糕的是,这是一个非常大的MVVM应用程序框架(内部构建)的一部分,通用基类也有一个基类等等......每个基类都添加了某些属性和功能,它看起来有点像这样:

DataListEntry <T> < - BaseSynchronisableDataType <T> < - BaseAuditDataType < - BaseDataType < - BaseAnimatableDataType

应用程序集合类使用类似的继承:

DataList <T> < - BaseSynchronisableCollection <T> < - BaseAnimatableCollection <T> < - BaseCollection <T> < - SortableObservableCollection <T>

更糟糕的是,每个泛型声明都有约束,因此,例如,BaseSynchronisableDataType <T>的定义如下所示:

public abstract class BaseSynchronisableDataType<T> : BaseAuditDataType, 
    ISynchronisable<T>, ICloneable<T>, IEquatable<T> where T : class, ICloneable<T>,
    IEquatable<T>, new()
Run Code Online (Sandbox Code Playgroud)

因此,每个泛型集合类型都通过这些约束绑定到泛型基类.希望到现在为止,您可以看到我的问题的规模.

我已经尝试使用接口(上面没有显示)来删除从集合到其各自基类的链接,但由于相关类的一些通用约束,这也失败了.例如,我无法创建接口类型的集合,因为在某些基类上存在必要的通用"类"约束,因此我得到错误,指出集合的类型'必须是非抽象类型,公共无参数构造函数,以便在泛型类型或方法中将其用作参数'T'.

最后一点需要注意的是我正在尝试做的事情:

我需要使用不同的类填充集合,这些类都扩展了DataList <T>基类.这些类仅在名称上有所不同,并且具有完全相同的属性.它们声明如下:

public class Writer : DataListEntry<Writer>    
public class Artist : DataListEntry<Artist>etc.
Run Code Online (Sandbox Code Playgroud)

如果您有任何想法,请告诉我...我已经在这个问题上遭受了2天的痛苦而我的老板也不高兴!非常感谢Sheridan.

c# generics collections base-class

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

Javascript getDay方法返回错误的数字

这是我在浏览器和node.js(类似)中测试的一个小的html/javascript.你可以看到最后一行不一样(我不知道,也许只在我的机器上).也许javascript代码通常有问题或者我做错了什么?

HTML

<p id="demo"></p>
<button onclick="myFunction()">Try it</button>
Run Code Online (Sandbox Code Playgroud)

脚本

function myFunction()
{
    var strng="";
    for (var i=25;i<32;i++){
        var d = new Date();
        d.setFullYear(2013, 11, i);
        var dt = new Date();
        dt.setDate(i);
        dt.setMonth(11);    
        dt.setYear(2013);
        strng += d.toLocaleDateString() + "  -  " + d.getDay() + " : " + dt.getDay() +" <br>";   
    }
    var x = document.getElementById("demo");
    x.innerHTML=strng;
}
Run Code Online (Sandbox Code Playgroud)

javascript

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

WPF 标注锚点起始位置

我已经实现了 Blend 的 Callout 控件。我面临的问题是标注的锚点从顶部开始有一些边距,而我想从标注的左上角开始锚点。任何帮助将不胜感激。

我现在拥有的:

在此输入图像描述 我想要什么:

在此输入图像描述

wpf callout

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

如何使用ItemsSource和DataTemplates从数据对象呈现功能区

我试图为我的功能区提供数据模板.

功能区声明如下,并附加了ItemTemplate.

<r:Ribbon Name="RibbonMain"
          ItemTemplate="{StaticResource HomeRibbonTabTemplate}">
</r:Ribbon>
Run Code Online (Sandbox Code Playgroud)

Datatemplate如下:

<Window.Resources>
    <DataTemplate DataType="{x:Type local:RibbonContainer}" 
                  x:Key="HomeRibbonTabTemplate">
        <r:RibbonTab Header="{Binding Path=HeaderName}">
            <r:RibbonGroup Header="{Binding Path=GroupName}">
            </r:RibbonGroup>
        </r:RibbonTab>
    </DataTemplate>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

然后我附上ItemsSource:

    public MainWindow()
    {
        InitializeComponent();

        var RibbonTabData = new ObservableCollection<RibbonContainer>();
        RibbonTabData.Add(new RibbonContainer("HeaderName", "GroupName"));
        RibbonMain.ItemsSource = RibbonTabData;
    }
Run Code Online (Sandbox Code Playgroud)

最后是类:(其中只包含两个字符串字段)

class RibbonContainer
{
    public string HeaderName
    {
        get;
        set;
    }

    public string GroupName
    {
        get;
        set;
    }

    public RibbonContainer(string _headername, string _groupname)
    {
        HeaderName = _headername;
        GroupName = _groupname;
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了在标题标题中显示完全限定类名的不起眼的结果,并且ribbongroup也没有显示.(这是datatemplate应该解决的问题?)怎么办?

最好的祝福

c# wpf binding

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

Treemap FirstKey()导入错误

我试图为我的treemap(内存)使用firstKey()方法.我的代码看起来像:

import java.util.*;

//Code in the middle.

System.out.println(memory.firstKey());
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误:

GameLogic.java:276: cannot find symbol
symbol  : method firstKey()
location: interface java.util.Map<java.lang.Integer,java.lang.Character>
System.out.println(memory.firstKey());
                                     ^
Run Code Online (Sandbox Code Playgroud)

所有建议都赞赏.如果我也使用lastKey(),也会发生同样的错误.

java treemap

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

Ruby 中非 ASCII 字符范围检查的正则表达式

我想拆分非 ASCII 格式的字符,即 UTF-8。我写了这行代码

result = string.scan(/[\x0600-\x06ff]/)
Run Code Online (Sandbox Code Playgroud)

不知何故它不起作用,并给出错误

"empty range in char class : /[\x0600-\x06ff]/".
Run Code Online (Sandbox Code Playgroud)

我只想检查一个字符是否在正则表达式的范围内。既然如此,那就分开吧。

ruby regex ruby-on-rails

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

如何在 WPF 中的 MainWindow 之前像启动画面一样打开子窗口?

我有两个xaml。一个是 MainWindow,另一个是 NewWindow。我想在程序运行时显示 NewWindow 5 秒。5 秒后,我想显示 MainWindow。

如何在 WPF 中更改 xaml?

这是主窗口。

<Window x:Class="WpfApplication2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>

</Grid>
Run Code Online (Sandbox Code Playgroud)

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是新窗口。

<Window x:Class="WpfApplication2.NewWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="NewWindow" Height="300" Width="300">
<Grid>

</Grid>
Run Code Online (Sandbox Code Playgroud)

public partial class NewWindow : Window
{
    public NewWindow()
    {
        InitializeComponent();
    }
}
Run Code Online (Sandbox Code Playgroud)

wpf

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

使用Task.WhenAny等待几个不同的异步操作的结果

我一直在寻找一个解决方案,看起来它一定是一个简单的问题.但是,我找到的每个示例都创建了一个Task与此类似的集合(取自如何:使用MSDN上的Task.WhenAll(C#和Visual Basic)扩展异步演练):

IEnumerable<Task<int>> downloadTasksQuery = 
    from url in urlList select ProcessURLAsync(url);
Run Code Online (Sandbox Code Playgroud)

我无法做到这一点,因为我想调用不同的async方法和await结果......更像是这样的东西(但不是这个,因为这似乎没有做任何事情):

var getTicketTasks = new List<Task<IEnumerable<ITicket>>>();
getTicketTasks.Add(new Task(() => Model.GetTicketsAsync(eventDate)));
getTicketTasks.Add(new Task(() => Model.GetGuestTicketsAsync(eventDate)));
...
getTicketTasks.Add(new Task(() => Model.GetOtherTicketsAsync(eventDate)));

IEnumerable<ITicket>[] tickets = await Task.WhenAll(getTicketTasks);
Run Code Online (Sandbox Code Playgroud)

那么如何使用该方法调用多种async方法和await结果Task.WhenAll呢?

.net c# asynchronous task-parallel-library async-await

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

如何使用 Windows 剪贴板和 C# 复制/粘贴特殊字符

我在这个帖子中发现了一个类似的问题,但我的问题不同,所以值得一个新帖子。

基本上,我有一个生成文本输出的 WPF/C# 应用程序。文本输出包括几个特殊的“?”实例。特点。用户可以单击一个按钮以通过电子邮件发送信息,这部分工作正常。用户可以单击应用程序中的另一个按钮将相同的文本输出复制到剪贴板,这就是我遇到问题的地方。我正在使用以下代码复制/粘贴文本。

public void SetClipboardText(string text)
{
    try { Clipboard.SetData(DataFormats.Text, text); }
    catch (COMException)
    {
        MessageBox.Show("The clipboard was inaccessible, please try again later");
    }
}

public string GetClipboardText()
{
    if (Clipboard.ContainsData("Text"))
    {
        try { return Clipboard.GetData(DataFormats.Text) as string; }
        catch (COMException)
        {
            MessageBox.Show("The clipboard was inaccessible, please try again later");
        }
    }
    return string.Empty;
}
Run Code Online (Sandbox Code Playgroud)

当复制的文本粘贴到任何外部文本编辑应用程序中时,“?” 字符被替换为“?” 特点。在网上搜索之后,我发现了另一篇关于在复制到剪贴板之前编码 HTML 的类似问题的文章。但是,在方法中添加以下代码行作为第一行后SetClipboardText,粘贴的“?” 字符现在在输出中替换为 'â„-'。

text = Encoding.GetEncoding(0).GetString(Encoding.UTF8.GetBytes(text));
Run Code Online (Sandbox Code Playgroud)

这告诉我这是一个编码问题。所以我的问题真的是,'我可以使用哪种字符编码来成功复制和粘贴'?' 特点?'。正如您从所有“?”中看到的那样 这篇文章中的字符,确实可以使用剪贴板复制和粘贴它们......但是如何?

附加信息:

这 '?' 字符来自所有 Windows PC …

c# windows clipboard special-characters

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

在代码c#中调用事件

是否可以在代码中调用如下所示的事件.

private void Item_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{

}
Run Code Online (Sandbox Code Playgroud)

我要调用它的对象是ListView.Items [listView.Items.Count-1]

XAML

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <EventSetter Event="PreviewMouseLeftButtonDown" 
            Handler="ListViewItem_PreviewMouseLeftButtonDown" />
    </Style>
</ListView.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)

所以我试图调用它看起来像这样,但它不起作用.

Item_PreviewMouseLeftButtonDown(listView.Items[slideListView.Items.Count-1], null);
Run Code Online (Sandbox Code Playgroud)

c# wpf events

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