プロが教える店舗&オフィスのセキュリティ対策術

記事「C#によるUSBカメラ操作(WPF編)」
https://tocsworld.wordpress.com/2014/02/26/cによるusbカメラ操作wpf編/
にある
DeviceFilters.cs
が「エラー 1 ジェネリック 型 'System.Collections.Generic.IEnumerable<T>' の使用には、1 型の引数が必要です。」と出ます。対処方法がわかりません。
私の理解では
public IEnumerable Get()
の行は、 IEnumerable の宣言と思いますが、コンパイラのエラーメッセージには IEnumerable<T> の宣言と誤解されている気がします。
対処方法および解説、よろしくお願いします。

<DeviceFilters.cs>
using System.Collections.Generic;
using System.Linq;
using AForge.Video.DirectShow;

namespace TestWpfApp
{
class DeviceFilters
{
public string Name { set; get; }
public string MonikerString { set; get; }

public IEnumerable Get(){
return from FilterInfo info in new FilterInfoCollection(FilterCategory.VideoInputDevice)
select new DeviceFilters { Name = info.Name, MonikerString = info.MonikerString };
}
}
}

A 回答 (2件)

using System.Collections.Generic


があるから
IEnumerable = System.Collections.Generic.IEnumerable
と解釈されているのでしょう。

・IEnumerableを省略しないで書く
・Using が不要なようなら取る
・特定の型/インターフェース等を返すなら、IEnumerableではなく IEnumerable<XXXX> 等とTに該当するクラスを指定する。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>・IEnumerableを省略しないで書く
なるほど。System.Collections.IEnumerable と書いてみました。

おかげ様で、この部分のエラーは無くなったのですが、今度は、いままでエラーが出ていなかった別の場所が
「エラー 1 デリゲート 'System.Action' に 1 個の引数を指定することはできません」になってしまいました。
一難去ってまた一難の状況です。

当方は、記事「C#によるUSBカメラ操作(WPF編)」
https://tocsworld.wordpress.com/2014/02/26/cによるusbカメラ操作wpf編/
にあるプログラムを実行させたいので、実行させる具体的な方法をご存じであれば、しばらく、回答をお待ちしますが、別の質問になりそうなので、改めて質問したいと思います。

お礼日時:2017/06/13 22:47

お礼を読みました。



#1のように回答しましたが、
お礼にあった Action のエラーを考えると、
もしかしたら、 IEnumerable も IEnumerable<T>として解釈させたいのに、 型パラメータT がうまく設定できていないのではないでしょうか?

Actionも、1パラメータ版の System.Action<T>と解釈させたいのに、パラメータ無しの System.Action になってしまっている、というこのではないでしょうか。

<T>にあたる型を指定する方が正解なのでしょう。

Visual Studio,C#のバージョンや設定の違いによるものかもしれません。
C#にはそれほど詳しくないので、これ以上はわかりません。
    • good
    • 0
この回答へのお礼

再度、回答ありがとうございます。
質問を変えて、再度出直しをしたいと思います。

お礼日時:2017/06/17 23:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!