小编Mar*_*tin的帖子

C#中的多重继承

由于多重继承是不好的(它使源更复杂),C#不直接提供这样的模式.但有时候拥有这种能力会有所帮助.

例如,我能够使用接口和三个类来实现缺少的多继承模式:

public interface IFirst { void FirstMethod(); }
public interface ISecond { void SecondMethod(); }

public class First:IFirst 
{ 
    public void FirstMethod() { Console.WriteLine("First"); } 
}

public class Second:ISecond 
{ 
    public void SecondMethod() { Console.WriteLine("Second"); } 
}

public class FirstAndSecond: IFirst, ISecond
{
    First first = new First();
    Second second = new Second();
    public void FirstMethod() { first.FirstMethod(); }
    public void SecondMethod() { second.SecondMethod(); }
}
Run Code Online (Sandbox Code Playgroud)

每次我向其中一个接口添加方法时,我都需要更改类FirstAndSecond.

有没有办法将多个现有类注入一个新类,就像在C++中一样?

也许有一种使用某种代码生成的解决方案?

或者它可能看起来像这样(假想的c#语法):

public class FirstAndSecond: IFirst from First, ISecond …
Run Code Online (Sandbox Code Playgroud)

c# interface multiple-inheritance

207
推荐指数
5
解决办法
37万
查看次数

使用C#播放流中的音频

C#中是否有一种方法可以直接从System.IO.Stream播放音频(例如MP3),例如从WebRequest返回而不将数据临时保存到磁盘?


NAudio的解决方案

NAudio 1.3 的帮助下,可以:

  1. 将URL中的MP3文件加载到MemoryStream中
  2. 完全加载后,将MP3数据转换为波形数据
  3. 使用NAudio的WaveOut类播放波形数据

如果能够播放半载MP3文件本来不错,但由于NAudio库设计,这似乎是不可能的.

这是完成工作的功能:

    public static void PlayMp3FromUrl(string url)
    {
        using (Stream ms = new MemoryStream())
        {
            using (Stream stream = WebRequest.Create(url)
                .GetResponse().GetResponseStream())
            {
                byte[] buffer = new byte[32768];
                int read;
                while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    ms.Write(buffer, 0, read);
                }
            }

            ms.Position = 0;
            using (WaveStream blockAlignedStream =
                new BlockAlignReductionStream(
                    WaveFormatConversionStream.CreatePcmStream(
                        new Mp3FileReader(ms))))
            {
                using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
                { …
Run Code Online (Sandbox Code Playgroud)

.net audio mp3 stream naudio

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

在数据库内的任何表的任何列中搜索一个值

有没有办法char(64)在一个MS SQL Server数据库中的任何表的任何列内搜索一个值(在我的情况下,它是该类型的UID )?

我坐在一个巨大的数据库前,不知道如何将表连接在一起.为了找到它,我想列出所有表,并列出任何行中包含特定值的列.那可能吗?

一种方法可能是将整个数据库转储到文本文件中,而不是使用任何文本编辑器来搜索值 - 但如果数据库太大,这将是非常痛苦的.

t-sql

93
推荐指数
4
解决办法
18万
查看次数

如何删除Python中的错误路径字符?

在Python中删除错误路径字符(例如Windows上的"\"或":")的最跨平台方法是什么?

因为似乎没有理想的解决方案,我决定相对限制,并使用以下代码:

def remove(value, deletechars):
    for c in deletechars:
        value = value.replace(c,'')
    return value;

print remove(filename, '\/:*?"<>|')
Run Code Online (Sandbox Code Playgroud)

python path

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

用于微控制器的GUI库

我想为微控制器(Atmel XMEGA)创建一个GUI驱动的应用程序,该应用程序连接到128x64点图形LCD(EA DOGL128-6)和4个导航按钮.

控制显示器本身(例如绘制像素和字符)是没有问题的,但是为了防止我重新发明轮子,我在google搜索用C语言编写的GUI-Library/-Toolkit,包括它的源代码,将运行在32 MHz 8位微控制器,至少提供以下控制:

  • 面板(对组元素)
  • 菜单(可滚动)
  • 图标
  • 标签
  • 按键
  • 线图(可选)

但我没有找到任何有用的东西.有没有人知道(或更好地使用)这样的库(最好是免费的)?

c embedded user-interface frameworks atmel

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

找出正在运行的批处理文件的文件名

在Windows批处理文件中,我想知道这个批处理文件的完全限定路径名是什么.

我尝试了%0但这只给了我输入的命令(例如只有没有路径或扩展名的文件名).

windows batch-file

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

在Mercurial存储库中查找文本的第一次出现

我有一个包含大约800个变更集的Mercurial存储库,我需要找到第一个变量集,其中出现了单词Example.该单词出现在.php文件中,而不是在提交注释等.

什么是最快/最简单的方法呢?

mercurial grep bisect

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

XmlSerializer和List <T>具有默认值

我在序列化时观察到一种奇怪的行为,而不是反序列化具有类型成员的类,该类List<T>在构造时填充了默认值.与基于数组的属性不同List<T>,XmlSerializer在反序列化时不会清空类型的属性.

这是我的代码:

public class Program
{
    public class Config
    {
        public Config()
        {
            Test1 = new List<string>()  {"A", "B"};
            Test2 = new String[] {"A", "B"};
        }
        public List<string> Test1 {get;set;}
        public string[] Test2 {get;set;}
    }

    public static void Main()
    {
        XmlSerializer xmlSerializer =
            new XmlSerializer(typeof(Config));
        using(Stream s = new MemoryStream())
        {
            xmlSerializer.Serialize(s, new Config());
            s.Position = 0;
            xmlSerializer.Serialize(Console.Out,
                xmlSerializer.Deserialize(s));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

<?xml version="1.0" encoding="ibm850"?>
<Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Test1>
    <string>A</string>
    <string>B</string>
    <string>A</string>
    <string>B</string>
  </Test1>
  <Test2> …
Run Code Online (Sandbox Code Playgroud)

.net c# xml generics xml-serialization

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

使用嵌套方法,收益率返回和组合使用时的奇怪执行顺序

我无法理解为什么Program.Fetch1,Program.Fetch2也不会导致完全相同的执行顺序.唯一的区别是Program.Fetch1调用Program.Fetch实际的获取操作.

class Program
{
    static IEnumerable<int> Fetch1()
    {
        using (Context c = new Context())
        {
            return Fetch(c);
        }
    }

    static IEnumerable<int> Fetch(Context c)
    {
        foreach (int i in c.Fetch())
        {
            yield return i;
        }
    }

    static IEnumerable<int> Fetch2()
    {
        using (Context c = new Context())
        {
            foreach (int i in c.Fetch())
            {
                yield return i;
            }
        }
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Fetch1:");
        foreach (int i in Fetch1())
        {
            Console.WriteLine(i);
        } …
Run Code Online (Sandbox Code Playgroud)

.net c# idisposable using yield-return

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

将字节数组转换为一个十进制数字作为字符串

我正在尝试编写将任意大字节数组(大于64位)转换为c#中表示为字符串的十进制数的函数,我根本无法弄清楚如何去做.

例如以下代码......

Console.WriteLine(ConvertToString(
  new byte[]
  { 
    0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 
    0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00
  }));
Run Code Online (Sandbox Code Playgroud)

..应打印出来

22774453838368691933757882222884355840
Run Code Online (Sandbox Code Playgroud)

我不想仅仅使用像biginteger这样的额外库,因为我希望它很简单并且想要了解它是如何工作的.

.net c#

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